Pythonマルチプロセッシングプールのimap_unordered呼び出しの進行状況を表示しますか?

| | | | | | | | | | | | | | |

imap_unordered()呼び出しを使用してタスクのマルチプロセッシングプールセットを正常に実行するスクリプトがあります。

  p = multiprocessing.Pool()rs = p.imap_unordered(do_work、xrange(num_tasks))p.close()#これ以上の作業はありませんp.join()#完了を待ちます 

ただし、私の num_tasks は約250,000なので、 join()はメインスレッドを10秒ほどロックします。コマンドラインに段階的にエコーアウトして、メインプロセスを表示できるようにしたいと思います。ロックされていません。次のようなものです。

  p = multiprocessing.Pool()rs = p.imap_unordered(do_work、xrange(num_tasks))p.close()#(True ):remaining = rs.tasks_remaining()#まだ行われていないマップ呼び出しはいくつありますか? if(remaining == 0):break#whileループから飛び出しますprint(" Waiting for"、remaining、" tasks to complete ...")time.sleep(2) 

残りのタスクの数を示す結果オブジェクトまたはプール自体のメソッドはありますか? multiprocessing.Value オブジェクトをカウンターとして使用してみました( do_workはタスクの実行後にcounter.value+ = 1 アクションを呼び出します)が、カウンタは、インクリメントを停止する前に、合計値の最大85%にしか到達しません。