私は次のように「multiprocess.Pool.imap_unordered」を使用しています
from multiprocessing import Pool
pool = Pool()
for mapped_result in pool.imap_unordered(mapping_func, args_iter):
do some additional processing on mapped_result
for ループの後にpool.close
または を呼び出す必要がありますか?pool.join
ベストアンサー1
いいえ、必要ありません。ただし、プールを今後使用しない場合は、そうした方が良いでしょう。
電話をかける理由pool.close
や、pool.join
ティム・ピーターズがうまく言っていることこのSOの投稿:
Pool.close() については、Pool インスタンスにそれ以上の作業を送信しない場合にのみ呼び出す必要があります。したがって、Pool.close() は通常、メイン プログラムの並列化可能な部分が終了したときに呼び出されます。その後、すでに割り当てられているすべての作業が完了すると、ワーカー プロセスは終了します。
また、ワーカー プロセスが終了するのを待つために Pool.join() を呼び出すのも優れた方法です。他の理由としては、並列化されたコードで例外を報告する適切な方法がないことが多い (例外はメイン プログラムの実行内容と漠然としか関連しないコンテキストで発生する) ことと、Pool.join() は、ワーカー プロセスで発生した、通常は表示されない例外を報告できる同期ポイントを提供するという点が挙げられます。