1. ホーム
  2. python

[解決済み] multiprocessing.Pool.joinはいつ呼び出すべきですか?

2022-08-28 07:22:44

質問

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

を呼び出す必要があるのでしょうか? pool.close または pool.join の後では?

どのように解決するのですか?

いいえ、そんなことはありません。しかし、もうプールを使用しないのであれば、その方がよいでしょう。

呼び出す理由 pool.close または pool.join は、Tim Peters が次のように言っています。 この SO ポスト :

<ブロッククオート

Pool.close()については、Poolインスタンスにこれ以上作業を送信しないとき、そしてそのときだけ、それを呼び出す必要があります。つまり、Pool.close() は通常、メイン・プログラムの並列化可能な部分が終了したときに呼び出されます。そして、ワーカー・プロセスは、すでに割り当てられたすべての作業が完了したときに終了します。

ワーカー・プロセスが終了するのを待つためにPool.join()を呼び出すことも優れたプラクティスです。他の理由の中で、並列化されたコードで例外を報告する良い方法はしばしばありません (例外はメインプログラムが何をしているかに漠然と関連したコンテキストでのみ発生します)。そして Pool.join() は同期ポイントを提供し、そうしなければ決して見ることができないワーカープロセスで発生したいくつかの例外を報告することができるのです。