2013-01-08 47 views
7

マルチスレッドコード(実際にはDataFrameのカスタムサブクラスSoundというカスタムサブクラス)でpandas.DataFrameを使用しています。プログラムのメモリ使用量が徐々に1000万を超えて増加し、最終的にコンピュータのメモリの約100%に達し、クラッシュするため、メモリリークが発生していることに気付きました。pandasデータフレームを使用したメモリリーク

私はこのリークを追跡しようとするobjgraphを使用し、それはいけないながらMyDataFrameのインスタンスの数は、すべての時間を上がっていることが判明:そのrunメソッド内のすべてのスレッドは、インスタンスを作成し、いくつかの計算を行い、保存しますその結果、ファイルが生成され、終了します。したがって、参照は保持されません。

enter image description here

それは普通のことだか、いない場合、私は見当がつかない...これが維持されているものであるように見えます:私は、メモリ内のすべてのデータフレームが、同様の参照グラフを持っていることがわかったobjgraphを使用して

メモリ内の私のオブジェクト。どんなアイデア、アドバイス、洞察?

+0

これを複製するための短いコードスニペットを含めることは可能ですか? –

+0

ガベージコレクタを手動で実行しようとしましたか?循環参照がある場合は、メモリを解放する必要があります。 'import gc; gc.collect() ' – lgautier

答えて

7

インデックスインフラストラクチャで何らかのメモリリークが発生していることを確認しました。上記参照グラフに起因するではなく、です。のは、(SO Q & Aのためである)のGitHubに議論を移動してみましょう:

https://github.com/pydata/pandas/issues/2659

EDIT:これは実際にすべてのメモリリークではないように見えますが、おそらくOSのメモリ割り当ての問題と関係があります。詳細はgithubの問題をご覧ください

+0

OK ... gcを使って手動で収集することは、実際にそのトリックを行うようです。私はそれについて確信しているときに私は確認します。 – sebpiq

+0

確認しました。これが問題でした...ありがとう! – sebpiq

+0

Gen 2 gcがPythonランタイムによって自動的に実行されていなかった理由は何ですか? – Fil

関連する問題