私は労働者の小さなプール(4)と非常に大きなタスクのリスト(5000〜)を持っています。私はプールを使用していて、map_async()でタスクを送信しています。私が実行しているタスクはかなり長いので、1つの長いプロセスがいくつかの短いプロセスを保持できないように、チャンクサイズを1に強制しています。
私がやりたいのは、提出する必要のあるタスクの数を定期的にチェックすることです。最大で4つがアクティブになることはわかっていますが、処理する必要があるのはいくつ残っているかが気になります。
私はグーグルで検索しましたが、これを行っている人を見つけることができません。
役立つ簡単なコード:
import multiprocessing
import time
def mytask(num):
print('Started task, sleeping %s' % num)
time.sleep(num)
pool = multiprocessing.Pool(4)
jobs = pool.map_async(mytask, [1,2,3,4,5,3,2,3,4,5,2,3,2,3,4,5,6,4], chunksize=1)
pool.close()
while True:
if not jobs.ready():
print("We're not done yet, %s tasks to go!" % <somethingtogettasks>)
jobs.wait(2)
else:
break