HPCでマルチプロセッシングを使用してコードを高速化しようとしました。それはOKを実行していたが、私はいくつかの計算を追加し、突然このエラーを投稿し始めた。私はマルチプロセッシングをせずに走らせても問題ありませんでした。壊れたパイプ:マルチプロセスプールからマップを使用
最初の〜20回の関数の実行はマルチプロセッシングには適していますが、その後はスノーボールを開始し、このエラーは頻繁に表示されます。
で「ある時点でステップのメモリ制限を超過」とすることを書かれているログ:私は「理由 『はRuntimeError(』 Pythonオブジェクトを呼び出している間、最大再帰の深さを超え 『』)」
import os
from multiprocessing import Pool
def eigencen(filename):
--DO complicated stuff here--
for f in os.listdir(FOLDER):
list_fn.extend([f])
def evaluation(f_list):
return list(Pool(processes=28).map(eigencen, f_list))
evaluation(list_fn)
をすることができ何とか修正しますか?マルチプロセッシングがなければ、それは永遠に走り出すでしょう。
が質問CPUのタスクは負荷をかけますか?そうでない場合は、代わりにスレッドを使用できます。 – kingJulian
これはかなりのメモリを消費します。私は28のコアを持つ1つのノード上で実行します。そして、何らかの仕方で、メモリは次のプロセスのために空ではないと思います。これは私の推測です。 –
この場合、マルチプロセッシングモジュールをキューと組み合わせて使用することができます。一般に、キューを使用すると、プールプロセスを制御する面でより柔軟になります。別の考え方は、map関数も持つconcurrent.futures.ProcessPoolExecutorクラスを使用することです。 – kingJulian