更新:- 机器重新启动后,此问题自行解决。尚无法弄清楚为什么之前会发生此错误。
我有一个函数可以加载一个巨大的 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
,没有内存错误。