(ネットワーク分析ライブラリ)を使用していくつかの遅い計算を行っておりnetworkx
、プールワーカーを使用してそれをいくらか高速化しようとしています。計算は独立しているため、並列化は比較的簡単です。
def computeInfoPooled(G,num_list):
pool=Pool(processes=4)
def f(k):
curr_stat={}
curr_stat[k]=slow_function(k,G)
return curr_stat
result = pool.map(f,num_list)
return result
ここで、コンソールで次を実行しました。
computed_result=computeInfoPooled(G)
このコードで 4 つのプロセスが作成され、別のプロセスで num_list のすべての項目 (数値) を指定して f が呼び出されることを期待します。num_list に 4 つ以上の数値 (私の場合は約 300) が含まれている場合、同時に 4 つを実行し、プールされたワーカーの 1 つが完了するまで残りをキューに入れます。
コードを実行したときに発生したのは、多くの python.exe が生成された (またはフォークされた、何が起こっているのかわからない) ことであり、無限に多くのプロセスが作成されているように見えたので、マシンのプラグを抜く必要がありました。
私が間違っていることと、それを修正する方法はありますか?