5

次のようなコードがあります。

def memoryIntensiveFunction(x):
    largeTempVariable = Intermediate(x)
    processFunction(largeTempVariable,x)

問題は、変数tempが私のテストケースでは 500 mb のようなものであるということですが、そのスペースmemoryIntensiveFunctionは終了時に OS に返されません。guppyツールを使用したメモリ プロファイリングでは、largeTempVariable解放されている (つまり、Python 内で) と表示されますが、解放されpsutilていないことが示されるため、私はこれを知っています。ここに記載されている効果が見られると思います。問題は、このプロセスが長時間 (つまり数時間)memoryIntensiveFunction実行され、最初に実行され、二度と実行されないことです。そのため、500MB を何時間も持ち歩かなければならないのは不便です。

ここここで見つけた1つの解決策は、別のプロセスを使用することを提案しています。マルチプロセッシングには独自のコストがかかりますが、私の場合はそれだけの価値があります。ただし、これには、呼び出し元がその場で変更されたことを確認するのではなく、戻り値としてmemoryIntensiveFunction受け取るようにリファクタリングする必要があります。x本当のキラーは、私のオブジェクトxが pickle 化できないことです (boost python 拡張機能を多用します)。ピクルスにするのは大変な作業xです。

検討していないオプションはありますか?

4

1 に答える 1