14

それぞれ 0.5 GB の pickle ファイルが 50 個あります。各ピクル ファイルは、カスタム クラス オブジェクトのリストで構成されます。次の関数を使用して、ファイルを個別に読み込むのに問題はありません。

def loadPickle(fp):
    with open(fp, 'rb') as fh:
        listOfObj = pickle.load(fh)
    return listOfObj

ただし、ファイルを繰り返しロードしようとすると、メモリ リークが発生します。

l = ['filepath1', 'filepath2', 'filepath3', 'filepath4']
for fp in l:
    x = loadPickle(fp)
    print( 'loaded {0}'.format(fp) )

loaded filepath2印刷する前にメモリがオーバーフローします。各反復中に単一の pickle のみがロードされることを保証するコードを作成するにはどうすればよいですか?

SOに関する関連する質問への回答は、weakrefモジュールで定義されたオブジェクトまたはモジュールを使用した明示的なガベージコレクションを使用することを提案していgcますが、これらのメソッドを特定のユースケースに適用する方法を理解するのに苦労しています。これは、参照が内部でどのように機能するかについて十分に理解していないためです。

関連: Python ガベージ コレクション

4

1 に答える 1