3

私のコードは

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と、問題は発生しません。

4

1 に答える 1