matplotlib.imshowでメモリリークを特定しました。私は同様の質問(Matplotlib imshowでの過度のメモリ使用量など)を認識しており、関連するironpythonスレッド(https://github.com/ipython/ipython/issues/1623/)を読みました。
以下のコードは(メモリリークがない場合)実行中に一定量のメモリを消費するはずだと思います。代わりに、反復ごとに大きくなります。
見つけた最新バージョン(matplotlib-1.2.0rc3.win32-py2.7およびnumpy-1.7.0.win32-py2.7)を実行していますが、問題は解決していません。私はimshowの戻り値を保持しておらず、実際には明示的に削除しているので、IronPythonの説明の注記は当てはまらないと思います。動作は、ループ内での明示的な割り当てと削除の有無にかかわらず同じです。
matplotlib-1.2.0.win32-py2.7でも同じ動作が見られます。
各反復は、イメージに必要なメモリにかかっているようです。各画像のサイズを興味深いものにするために、大きな(1024x1024)ランダム行列を選択しました。
Win7 proを2Gの物理RAM、32ビットのpython2.7.3(したがって、メモリエラー)、および上記のnumpyパッケージとmatplotlibパッケージで実行しています。以下のコードは、反復440程度でメモリエラーが発生して失敗します。Windowsタスクマネージャーは、失敗したときに1,860,232Kの消費を報告します。
リークを示すコードは次のとおりです。
IMAGE_SIZE = 1024
import random
RANDOM_MATRIX = []
for i in range(IMAGE_SIZE):
RANDOM_MATRIX.append([random.randint(0, 100) for each in range(IMAGE_SIZE)])
def exercise(aMatrix, aCount):
for i in range(aCount):
anImage = imshow(aMatrix, origin='lower left', vmin=0, vmax=100)
del(anImage)
if __name__=='__main__':
from pylab import *
exercise(RANDOM_MATRIX, 4096)
おそらく、matplotlibの代わりにPILを使用して画像をレンダリングできます。回避策がない場合、これはmatplotlibのショーストッパーだと思います。