更新:在重启机器后,这个问题自己解决了。目前还不能确定为什么之前会出现这个错误。
我有一个函数,加载一个很大的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中出现,在简单的Python( >>> )中执行 del testcube
后,并不会出现内存错误。
whos
命令来查找占用内存的内容吗? - tiago