我正在Python 3.7中使用多重处理来启动几个长期运行的操作。每个单独的过程都需要花费几分钟才能完成。我想要同时显示正在运行的每个单个进程的进度条。我一直很难做到这一点,因为进度条一直在不停地跳来跳去,并且在我目前的徒劳尝试中彼此替代。
我这样创建流程:
with Pool(processes=cpu_count()) as pool:
return pool.starmap(_execute_long_running_process, items)
我的_execute_long_running_process
函数内部是一个for
循环,我希望进度条能够跟踪该循环。
for i in tqdm(list_of_things_to_process, leave=False):
# do a thing
我认为我的问题来自于其自己的流程(与主要流程)分开存在的每个tqdm
进度条。我不确定要使它们像我预期的那样在我有几个进度条的地方进行更新的解决方法。
答案 0 :(得分:0)
通过以这种方式构造计算,我获得了良好的结果:
with multiprocessing.Pool() as p:
list(tqdm.tqdm(p.imap_unordered(inserter, tasks), total=len(tasks)))
这为您提供了一个统一的所有进度条。
答案 1 :(得分:0)