4

いくつかのプロセスを並行して実行し、それらが終了するまで待ちたい。だから私はこのコードを書いた:

pool = mp.Pool(5)
for a in table:
    pool.apply(func, args = (some_args))
pool.close()
pool.join()

ここで5 つのプロセスfuncを並行して実行できますか? または、唯一のオプションはapply_async?

4

2 に答える 2

3

ドキュメントはこれについて非常に明確です。結果の準備が整うまで、各呼び出しはapplyブロックされます。を使用しapply_asyncます。

于 2013-06-26T11:24:45.843 に答える
2

別の解決策は、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
于 2014-06-11T18:29:04.167 に答える