次のようなコードがあります。
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です。
検討していないオプションはありますか?