如何使用tqdm监控代码运行完成进度并显示百分比进度条
Python tqdm 实现长NLP任务百分比进度条方案
首先安装依赖:pip install tqdm
基础用法:直接包裹可迭代对象
如果你的逻辑是逐样本/逐批次处理数据集、遍历固定长度的任务列表,直接把可迭代对象传给tqdm()即可,工具会自动计算完成百分比、已运行时长、预计剩余时长、实时处理速度,和软件安装的进度条效果完全一致。
NLP批量文本处理示例:
from tqdm import tqdm import time # 模拟需要处理的NLP数据集 text_dataset = [f"news_sample_{i}" for i in range(10000)] processed_res = [] # tqdm直接包裹遍历对象即可 for item in tqdm(text_dataset, desc="文本预处理进度"): # 替换为你实际的业务逻辑:分词、向量化、模型推理等 time.sleep(0.0003) # 模拟单条文本处理耗时 processed_res.append(item)
运行时终端会实时刷新如下样式的进度:文本预处理进度: 45%|████▌ | 4500/10000 [00:01<00:01, 2997.56it/s]
字段依次对应:自定义进度说明、完成百分比、可视化进度条、已完成量/总任务量、已耗时、预计剩余时间、每秒处理速度。
长任务适配:手动控制进度更新
如果你的任务是分多个独立阶段执行(比如先加载大模型、再跑批量推理、最后做结果导出,总耗时可达1小时,没法全部塞进同一个遍历循环),可以手动控制进度条的更新步长,精准匹配实际任务进度:
from tqdm import tqdm import time # 初始化进度条,总长度设为100,直接对应百分比展示 pbar = tqdm(total=100, desc="NLP任务总进度") # 阶段1:加载预训练模型,占总进度20% time.sleep(12*60) # 模拟模型加载耗时12分钟 pbar.update(20) # 进度推进到20% # 阶段2:批量推理,占总进度70% for batch in tqdm(range(70), desc="批次推理进度"): time.sleep(0.6*60) # 模拟单批次处理耗时36秒,70个批次合计42分钟 pbar.update(1) # 每完成1个批次,总进度推进1% # 阶段3:结果评估与导出,占总进度10% time.sleep(6*60) # 模拟结果导出耗时6分钟 pbar.update(10) # 任务结束关闭进度条 pbar.close()
1小时长任务实用调参
针对长时间运行的任务,几个常用参数可以避免进度条显示异常、提升可读性:
position=0:多进度条嵌套、循环内有print输出时,不会出现进度条乱跳、刷屏重复行的问题unit:自定义进度单位,比如处理文本设unit="条",模型训练设unit="batch",展示更直观ncols=120:固定进度条整体宽度,避免终端窗口大小变化导致进度条错位- 如果你在Jupyter Notebook环境运行,把导入语句替换为
from tqdm.notebook import tqdm,会生成适配网页端的交互式进度条,不会在输出区刷出大量冗余行
带参数的调用示例:
for item in tqdm(text_dataset, desc="命名实体识别进度", unit="条", ncols=120, position=0): # 实际处理逻辑 pass
注意:如果循环内有逻辑会跳过部分任务,要按实际完成的任务量调用
update(),不要硬套固定步长,否则会出现百分比和实际进度不符的问题。
内容的提问来源于stack exchange,提问作者KB-kodax
相关产品推荐
相关产品推荐

