如何使用 tqdm 处理不规则更新

How to handle irregular updates with tqdm

我正在使用 tqdm 在加载某些内容时显示进度条。虽然有些步骤非常快,但其他步骤可能需要几秒钟甚至几分钟。我正在经历的是,估计的剩余时间也在几分钟(如果发生了一些快速步骤)和几小时(在一些缓慢的步骤之后)之间跳跃。我想向用户展示的真相介于两者之间。

我想知道 tqdm 是否有一个选项可以告诉您剩余时间应该计算为全局平均值?假设400步中的100步用了10分钟(不管最后两步是快还是慢),估计剩余时间只有40分钟?

smoothing=0是这些情况下要设置的参数吗?文档有点混乱,因为它指出

smoothing: float, optional

Exponential moving average smoothing factor for speed estimates (ignored in GUI mode). Ranges from 0 (average speed) to 1 (current/instantaneous speed) [default: 0.3].

这只是“速度”吗?预计剩余时间是否相应变化?

我测试了以下代码,smoothing=0 确实是要使用的参数。

考虑以下代码片段,观察当更新高度不规律时进度条如何对 smoothing=0 更有帮助:

from time import sleep
from tqdm import tqdm
import random

# Default smoothing of 0.3 - irregular updates and medium-useful ETA
for i in tqdm(range(100)):
    sleep(random.randint(0,5)/10)

# Immediate updates - not useful for irregular updates
for i in tqdm(range(100), smoothing=1):
    sleep(random.randint(0,5)/10)

# Global smoothing - most useful ETA in this scenario
for i in tqdm(range(100), smoothing=0):
    sleep(random.randint(0,5)/10)