python - 将 tqdm 与 multiprocessing 一起用于多个进度条
问题描述
我想监视不同进程的多个工作人员的进度。对于每个子流程,我都有自己的进度条,但它不能与ProcessPoolExecutor
执行程序一起正常工作。
def main():
with futures.ProcessPoolExecutor(max_workers=PROCESSES) as executor:
fut_to_num = {}
for i in range(PROCESSES):
fut = executor.submit(execute_many_threads, i)
fut_to_num[fut] = i
for future in futures.as_completed(fut_to_num):
r = future.result()
# print('{} returned {}'.format(fut_to_num[future], r))
print('\nDone!\n')
def execute_many_threads(n_pool=0):
with futures.ThreadPoolExecutor(max_workers=THREADS) as executor:
for i in range(THREADS):
executor.submit(execute_thread, n_pool, i)
return n_pool+1
def execute_thread(n_pool=0, n_thread=0):
s = random.randint(1, 5)
thread_num = n_pool*(PROCESSES-1) + n_thread
progress = tqdm.tqdm(
desc='#{:02d}'.format(thread_num),
position=thread_num,
total=10*s,
leave=False,
)
# print('Executing {}: {}...'.format(thread_num, s))
for i in range(s):
time.sleep(1)
progress.update(n=10)
progress.close()
return s
当替换为ThreadPoolExecutor
(第二行)时,一切正常,所以我认为这可能与一些序列化问题有关。您能否帮助找出tqdm
使用多处理时的正确调用。
python --version
是Python 3.7.2
和tqdm==4.31.1
,Ubuntu 18.04
解决方案
推荐阅读
- javascript - 单击嵌套元素 - 嵌套元素上的事件冒泡未按预期工作
- java - Java RESTful 服务响应过滤
- android - 如何远程获取 SVG
- python - 为什么尝试调用此模块会导致“int object is not iterable”错误?
- jquery - 根据月份更改日期选择器
- google-cloud-platform - 有什么办法可以备份虚拟机实例,并使其在本地可用?
- unix - 什么可能导致“kill -9”有时无法按预期工作?
- angular7 - Angular 7:Observable 未能发出事件
- php - 根据更改哈希值更改密码
- dart - 如何将 HTTP 响应流(图像)转换为文件?