更新: - この問題は、マシンの再起動後に解決されます。このエラーがなぜ起きたのかまだ分かりません。IPythonで膨大な数の配列のメモリを解放する
私は膨大な数の配列(〜980MB)を読み込んで返します。
Ipythonを初めて起動してこの関数を呼び出すと、問題なく配列に変数がロードされます。
同じコマンドをもう一度実行すると、「メモリエラー」が発生して終了します。
私はまだ同じエラーが発生しました、
del hugeArray
を以下を試してみました。 は私も最初は、以下の
del hugeArray
gc.collect()
gc.collect()
を試してみました、gc.collect()
は145を返し、2番目の呼び出しは、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
@tiago:%whosコマンドの出力を追加しました。ロードしたモジュール以外は表示されません。 – indiajoe
オブジェクトを削除する前に参照カウントを表示できますか? 'import sys; sys.getrefcount(testcube)' – HYRY