如何为tqdm各迭代添加时长权重提示以优化ETA准确性?
为tqdm任务添加耗时权重优化ETA计算
当然可以通过自定义进度权重来优化tqdm的ETA计算,核心思路是给每个任务分配对应的相对耗时权重,让tqdm按照总权重而非任务数量来计算进度和预计完成时间。
解决方法
- 为每个任务定义对应的相对权重(比如你示例里的1、5、10)
- 初始化tqdm时,将
total参数设为权重总和 - 执行每个任务后,手动调用
update()方法传入当前任务的权重,让进度条按权重推进
修正后的完整代码
from tqdm import tqdm def create_task(n): def fib(x): if x == 1 or x == 0: return 1 return fib(x - 1) + fib(x - 2) return lambda: fib(n) n = 1 tasks = [create_task(n), create_task(5*n), create_task(10*n)] # 对应每个任务的相对耗时权重,和任务列表一一对应 weights = [1, 5, 10] total_weight = sum(weights) # 初始化进度条,总进度设为权重总和 with tqdm(total=total_weight) as pbar: for task, weight in zip(tasks, weights): task() # 注意:原代码的task.run()错误,lambda函数直接调用即可 pbar.update(weight) # 按当前任务的权重更新进度
原理说明
tqdm默认每个迭代贡献1个进度单位,现在我们让每个任务根据其耗时权重贡献对应数量的进度单位。比如总权重是16,第一个任务完成后进度推进1/16,第二个推进5/16,第三个推进10/16。这样tqdm会基于已完成的权重占比和实际耗时,计算出更贴合真实情况的ETA,避免因任务耗时差异大导致的预估偏差。
内容的提问来源于stack exchange,提问作者fegemo
相关产品推荐
相关产品推荐

