12

objgraph を使用して Coopr パッケージのメモリ リークをデバッグしようとしています: https://gist.github.com/3855150

オブジェクトに固定されてい_SetContainerますが、そのオブジェクトがメモリに保持されている理由がわかりません。の結果は次のobjgraph.show_refsとおりです。

show_refs

循環参照を見つける方法と、ガベージ コレクターに_SetContainerインスタンスを収集させる方法を教えてください。

以前は、クラス自体に自己参照があるのではないかと考えていました (上の画像の右側のクラスのすぐ下にあるタプル)。しかし、objgraph は常に、継承されたクラスを常に自己参照タプルを持つものとして表示します。ここで非常に単純なテスト ケースを確認できます。

4

1 に答える 1

1

objgraphの出力からほぼ推測ですが、インスタンスが循環しており、そのクラスに__del__. この状況では、オブジェクトは CPython で永久に存続します。次の方法で確認します。

import gc; gc.collect(); print gc.garbage

http://docs.python.org/library/gc.html#gc.garbage

于 2012-10-19T09:02:07.803 に答える