私のコードは
from pathos.multiprocessing import ProcessingPool
def myFunc(something):
thispool = ProcessingPool(nodes=Result.cores)
listOfResults = thispool.map(something)
return listOfResults
for i in range(1000):
myFunc(i)
さて、実際のより複雑なコードでは、メモリ使用量が増え続けました。コードは何も必要としませんが、12 コアで実行すると、これらの 12 コアは最初はほぼ 1 MB のメモリを消費しますが、数時間のランタイムでは、それぞれ数 GB を消費します。
そのため、プールはメモリ リークを起こすので、反復ごとに閉じた方がよいと考えました。
def myFunc(something):
thispool = ProcessingPool(nodes=Result.cores)
listOfResults = thispool.map(something)
thispool.close()
thispool.join()
return listOfResults
しかし、今、何度か繰り返した後、
ValueError: Pool not running
ラインでthis pool.map()
。私が新しいものを作成する場合
test = ProcessingPool(nodes=4)
実行しようとするとtest.map()
、同じエラーが発生します。奇妙なことに、新しい変数を初期化しました...pathos.processing.ProcessingPool
一意のプロセスプールの機能があり、1つを閉じるとすべてを閉じますか?
pathos.multiprocessing.ProcessingPool
メモリリークなしでループ内に実装する正しい方法は何ですか?
代わりに を使用するmultiprocessing.Pool
と、問題は発生しません。