我如何在Python中显式释放内存?

我编写了一个Python程序,该程序作用于大型输入文件,以创建几百万个代表三角形的对象。 该算法是:

  • 读取输入文件
  • 处理文件并创建一个由其顶点表示的三角形列表
  • 以OFF格式输出顶点:顶点列表,后跟一系列三角形。 三角形由顶点列表中的索引表示
  • 在打印出三角形之前打印出完整的顶点列表的OFF的要求意味着在将输出写入文件之前,我必须在内存中保存三角形列表。 与此同时,由于列表的大小,我收到内存错误。

    告诉Python我不再需要某些数据并且它可以被释放的最好方法是什么?


    根据Python官方文档,您可以强制垃圾收集器使用gc.collect()释放未引用的内存。 例:

    import gc
    gc.collect()
    

    不幸的是(取决于你的版本和Python版本),某些类型的对象使用“自由列表”,这是一种整洁的局部优化,但可能导致内存碎片化,具体做法是为更多和更多内存“专用”从而无法获得“普通基金”。

    唯一真正可靠的方法是确保大量但暂时使用的内存DOES在完成后将所有资源返回给系统,这种方法是在子进程中发生这种情况,这样内存耗尽的工作就会终止。 在这种情况下,操作系统将完成其工作,并乐意回收子进程可能吞并的所有资源。 幸运的是,在现代版本的Python中, multiprocessing模块使得这种操作(过去相当痛苦)不算太坏。

    在你的用例中,对于子进程来说,积累一些结果并确保这些结果可用于主进程的最好方式是使用半临时文件(通过半临时文件,我的意思是,不是那种类型的文件在关闭时会自动消失,只有当您完成所有操作时才显式删除的普通文件)。


    del语句可能是有用的,但IIRC 并不保证释放内存 。 文档在这里......以及为什么它没有发布在这里。

    我听说Linux和Unix类型系统上的人员正在寻求python进程来完成一些工作,获得结果然后将其杀死。

    本文对Python垃圾收集器有记录,但我认为缺乏内存控制是管理内存的缺点

    链接地址: http://www.djcxy.com/p/55201.html

    上一篇: How can I explicitly free memory in Python?

    下一篇: Simple asynchronous task with asyncio