我有一个脚本,它成功地执行了一组多处理池任务imap_unordered()
call:
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%。
我个人最喜欢的——在并行运行和提交的同时,为您提供一个不错的小进度条和完成预计时间。
from multiprocessing import Pool
import tqdm
pool = Pool(processes=8)
for _ in tqdm.tqdm(pool.imap_unordered(do_work, tasks), total=len(tasks)):
pass
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)