いくつかのプロセスを並行して実行し、それらが終了するまで待ちたい。だから私はこのコードを書いた:
pool = mp.Pool(5)
for a in table:
pool.apply(func, args = (some_args))
pool.close()
pool.join()
ここで5 つのプロセスfunc
を並行して実行できますか? または、唯一のオプションはapply_async
?
いくつかのプロセスを並行して実行し、それらが終了するまで待ちたい。だから私はこのコードを書いた:
pool = mp.Pool(5)
for a in table:
pool.apply(func, args = (some_args))
pool.close()
pool.join()
ここで5 つのプロセスfunc
を並行して実行できますか? または、唯一のオプションはapply_async
?
ドキュメントはこれについて非常に明確です。結果の準備が整うまで、各呼び出しはapply
ブロックされます。を使用しapply_async
ます。
別の解決策は、Pool.imap_unordered()を使用することです
次のコードは、5 つのワーカーのプールを開始します。次に、3 つのジョブをプールに送信します。最初の結果は num=1、2 番目の num=2 などです。この関数imap_unordered
は、任意のワーカーからの最初の結果が表示されると、それをさらに処理するために返すことを意味します。この場合、ループは特定の順序ではなく、表示されるとおりに結果を出力します。
import multiprocessing
def calc(num):
return num*2
pool = multiprocessing.Pool(5)
for output in pool.imap_unordered(calc, [1,2,3]):
print 'output:',output