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

我编写了一个Python程序,该程序做用于大型输入文件,以建立表明三角形的数百万个对象。 该算法是: html

  1. 读取输入文件
  2. 处理文件并建立由三角形顶点表示的三角形列表
  3. 以OFF格式输出顶点:一个顶点列表,后跟一个三角形列表。 三角形由顶点列表中的索引表示

在打印三角形以前先打印出完整的顶点列表的OFF要求意味着在将输出写入文件以前,必须将三角形列表保留在内存中。 同时,因为列表的大小,我遇到了内存错误。 python

告诉Python我再也不须要某些数据而且能够释放它们的最佳方法是什么? 算法


#1楼

Python是垃圾回收的,所以,若是减少列表的大小,它将回收内存。 您还可使用“ del”语句彻底摆脱变量: 优化

biglist = [blah,blah,blah]
#...
del biglist

#2楼

del语句可能有用,可是IIRC 不能保证释放内存文档在这里 ... 为何不发布spa

我据说Linux和Unix类型系统上的人们分叉python进程来作一些工做,得到结果真后杀死它。 操作系统

本文对Python垃圾收集器进行了说明,但我认为缺少内存控制是托管内存的缺点 .net


#3楼

您不能显式释放内存。 您须要作的是确保您不保留对对象的引用。 而后将对它们进行垃圾回收,从而释放内存。 code

对于您的状况,当您须要大型列表时,一般须要从新组织代码,一般使用生成器/迭代器。 这样,您根本就不须要在内存中存储大型列表。 htm

http://www.prasannatech.net/2009/07/introduction-python-generators.html 对象


#4楼

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

import gc
gc.collect()

#5楼

不幸的是(取决于您的Python版本和版本),某些类型的对象使用“空闲列表”,这是一种整洁的局部优化,但可能会致使内存碎片,特别是经过使愈来愈多的“专用”内存仅用于特定类型的对象而引发的内存碎片。所以没法使用“普通基金”。

确保确实大量但临时使用内存的惟一可靠方法是在完成后将全部资源返回系统,这是在子进程中进行,该进程须要大量内存,而后终止。 在这种状况下,操做系统将完成其工做,并乐意回收子进程可能吞没的全部资源。 幸运的是,在现代版本的Python中, multiprocessing模块使这种操做(之前是很痛苦的)不太糟糕。

在您的用例中,彷佛子过程累积一些结果并确保这些结果可用于主过程的最佳方法是使用半临时文件(我所说的是半临时文件,而不是那种关闭后会自动消失,只会删除您用完后会明确删除的普通文件)。

相关文章
相关标签/搜索