更新: - 在计算机重新启动后,此问题自行解决。还没有弄清楚为什么这个错误发生之前。在IPython中释放庞大的numpy数组内存
我有一个函数,加载一个巨大的numpy数组(〜980MB)并返回它。
当我第一次启动Ipython并调用此函数时,它将数组加载到变量中没有任何问题。
但是,如果我再次运行相同的命令,它退出引发“内存错误”。
我尝试以下,
del hugeArray
还是一样的错误正在发生。 我甚至尝试以下
del hugeArray
gc.collect()
gc.collect()
最初,gc.collect()
返回145和第二调用返回48 但即使这样,当我打电话的功能,它仍然提高内存错误。
我可以再次加载的唯一方法是重新启动ipython。 有什么我可以做的,以释放ipython中的所有内存,以便我不必重新启动它?
----------------更新
以下是%whos
Variable Type Data/Info
------------------------------
gc module <module 'gc' (built-in)>
gr module <module 'Generate4mRamp' <...>rom 'Generate4mRamp.pyc'>
np module <module 'numpy' from '/us<...>ages/numpy/__init__.pyc'>
plt module <module 'matplotlib.pyplo<...>s/matplotlib/pyplot.pyc'>
着这样的输出,GR是包含功能我模块,我用来加载数据立方体。
---------如何重现错误
下面的简单功能能够重现错误。
import numpy as np
import gc
def functionH():
cube=np.zeros((200,1024,1024))
return cube
testcube=functionH() #Runs without any issue
del testcube
testcube=functionH() # Raises Memory Error
del testcube
gc.collect()
gc.collect()
testcube=functionH() # Still Raises Memory Error
此错误发生仅在IPython中。在给出del testcube
之后,在简单的python(>>>)中,没有内存错误。
你可以尝试在ipython中调用'whos'来找出什么是占用内存? – tiago 2013-04-28 09:15:35
@tiago:我添加了%whos命令的输出。它不显示除我加载的模块之外的任何东西。 – indiajoe 2013-04-28 09:52:45
在删除对象之前可以显示对象的引用计数吗? 'import sys; sys.getrefcount(testcube)' – HYRY 2013-04-28 11:34:35