You need to enable JavaScript to run this app. Python使用multiprocessing多进程时如何显示tqdm进度条?
优惠活动
大模型
产品
解决方案
定价
更多

Python使用multiprocessing多进程时如何显示tqdm进度条?

问题原因

你的写法不生效有两个核心问题:

  1. pool.map()是阻塞方法,会等待所有子进程任务全部执行完成后才会一次性返回所有结果,此时再套tqdm相当于迭代一个已经完成的结果列表,自然看不到中间进度。
  2. total参数配置错误,你填写的os.cpu_count()是并行执行的进程上限,不是总任务数,总任务数应该是待处理的date列表长度,同时你代码里不小心把函数名写成了create_od,要改回你实际定义的create_data。

正确实现方案

用非阻塞的imap/imap_unordered方法逐次返回执行结果,就能实时更新进度条:

%%time
from tqdm import tqdm
from multiprocessing import Pool
import pandas as pd
import os

# Windows系统必须加这行判断,否则多进程会报错
if __name__ == '__main__':
    with Pool(processes=os.cpu_count()) as pool:
        # 需要保持输入date和输出结果顺序一致时用imap
        results = list(tqdm(pool.imap(create_data, date), total=len(date), desc='任务执行进度'))
        # 不需要结果顺序时可以用imap_unordered,执行效率更高、进度更新更流畅
        # results = list(tqdm(pool.imap_unordered(create_data, date), total=len(date), desc='任务执行进度'))
        data = [ent for sublist in results for ent in sublist]
        data = pd.DataFrame(data, columns = cols)
        data.to_csv(f"{str(date)}.csv", index=False)

注意事项

  • 如果单个create_data任务执行时间过长,可以考虑把date列表拆分为更小的子任务,避免进度条长时间卡在同一个进度点。
  • 导出文件名建议补充.csv后缀,避免生成无后缀的文件。

内容的提问来源于stack exchange,提问作者catris25

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 14:45:04