Python 3.8并行填充DataFrame时如何显示执行进度条
并行填充DataFrame时添加进度条实现方案
使用multiprocessing.Pool执行并行计算任务时完全可以显示实时进度条,直接借助tqdm库即可实现,几乎不需要改动原有并行逻辑。
实现步骤
- 先安装依赖(已安装可跳过):
pip install tqdm - 核心逻辑是:
imap_unordered返回的是惰性可迭代对象,每完成一个子任务就会吐出一个结果,用tqdm包裹这个可迭代对象、手动传入总任务数,就能在每收到一个完成结果时自动更新进度。
修改后的可直接运行代码
import pandas as pd from multiprocessing import Pool from tqdm import tqdm if __name__ == '__main__': my_pool = Pool(10) # 传入total参数指定总任务量,desc自定义进度条前缀文字 task_iter = my_pool.imap_unordered(parallelize_dataframe, range(0, len(dates))) Data = pd.concat(tqdm(task_iter, total=len(dates), desc="DataFrame并行填充进度")) my_pool.close() my_pool.join()
注意事项
- 不要为了省事改用
Pool.map方法:map会等待所有子任务全部执行完成后才一次性返回全部结果,无法实现单任务粒度的实时进度更新,只有imap/imap_unordered这类逐任务返回结果的接口才能驱动进度条正常刷新。 - 如果单任务执行速度极快、进度条刷新过于频繁,可以给
tqdm加mininterval=0.5参数,限制进度条每0.5秒最多刷新一次,减少不必要的终端IO消耗。 - 如果是在Jupyter Notebook环境下运行,把导入语句替换为
from tqdm.notebook import tqdm,就能显示适配Notebook界面的交互式进度条,其余逻辑不需要改动。
内容的提问来源于stack exchange,提问作者Stephen Ge
相关产品推荐
相关产品推荐

