如何在Numpy中实现垃圾收集

时间:2014-06-01 08:10:19

标签: python python-2.7 numpy garbage-collection

我有一个名为main.py的文件,该文件引用另一个文件Optimisers.py,该文件只包含其中的函数,并在for的{​​{1}}循环中使用。这些函数具有不同的优化功能。

这个main.py然后引用另外两个类似的文件,其中只包含函数,它们位于Optimisers.py循环中。所有这些文件都使用numpy。

我认为这是因为函数调用的循环和在numpy中创建数组,这导致内存过载。因此,我无法完成一些优化算法,或循环遍历我想要的所有可能坐标。

如何确保删除numpy中的变量?据我所知,numpy的C库使标准Python进程复杂化。 while命令(来自下面的链接)有什么作用?我应该在哪里实现它?

P.S。我已阅读" Releasing memory of huge numpy array in IPython", 并且%reset array也不起作用。

1 个答案:

答案 0 :(得分:5)

当不再引用numpy数组时,GC将自动释放它。 C对象包装在Python对象中,所以对你来说它应该是如何实现的。

确保全局变量中没有引用数组,因为这些数据一直存在,直到被覆盖或程序退出。

如果你需要在局部变量超出范围之前从局部变量中释放一个数组,你可以使用del variablename(或者只分配例如None),但这不会处理任何其他引用,只需要一个命名。

对于调试引用对象的位置,可以使用gc.get_referrers(object)

  

P.S。我已经读过在IPython中释放大量numpy数组的内存,而gc.collect()也不起作用。

除非您有周期或已调用gc.disable(),否则gc.collect()不会更快地发生GC。