我有一个脚本,它通过 imap_unordered()
调用成功地完成了一组多处理 Pool 任务:
p = multiprocessing.Pool()
rs = p.imap_unordered(do_work, xrange(num_tasks))
p.close() # No more work
p.join() # Wait for completion
但是,我的 num_tasks
大约是250,000,所以 join()
锁定主线程大约10秒钟,我希望能够逐步回显到命令行,以显示主进程没有被锁定。比如:
p = multiprocessing.Pool()
rs = p.imap_unordered(do_work, xrange(num_tasks))
p.close() # No more work
while (True):
remaining = rs.tasks_remaining() # How many of the map call haven't been done yet?
if (remaining == 0): break # Jump out of while loop
print("Waiting for", remaining, "tasks to complete...")
time.sleep(2)
结果对象或池本身是否有一个方法来指示剩余任务的数量?我尝试使用 multiprocessing.Value
对象作为计数器(do_work
在执行任务之后调用 counter.value += 1
操作) ,但是计数器在停止递增之前只获得总值的约85% 。