tqdm进度栏:显示每分钟的进度

时间:2019-11-29 15:56:09

标签: python-3.x tqdm

我无法在GitHubdocs上找到它,但是我想知道是否有一种集成的方法(首选)或解决方法来显示一次迭代的平均时间分钟而不是秒。

具体来说,tqdm显示类似1283.31s/it的内容,但是如果每次迭代都花费大量时间(例如数分钟或数小时),则显示类似21m/it的内容将更有帮助。

1 个答案:

答案 0 :(得分:1)

我们可以通过使用指令partially described in the manualbar_format的自定义实例添加自定义tqdm参数来做到这一点:

class TqdmExtraFormat(tqdm):
    """Provides a `minutes per iteration` format parameter"""
    @property
    def format_dict(self):
        d = super(TqdmExtraFormat, self).format_dict
        rate_min = '{:.2f}'.format(1/d["rate"] / 60) if d["rate"] else '?'
        d.update(rate_min=(rate_min + ' min/' + d['unit']))
        return d

我们在这里所做的是使用自定义版本覆盖format_dict,该自定义版本添加了可以在bar_format参数中使用的新统计信息。 d是现有的format_dict,因此我们可以使用它来获取{rate}的值,将其转换为每次迭代的时间(1 /速率),除以60,然后将其格式化为小数点后2位。然后,我们使用新的统计信息更新d-我们甚至可以使用字符串连接来添加一些格式。请注意,在任何迭代完成之前,{rate}None,这意味着除非您进行if d["rate"]检查,否则这将产生错误。

完成此操作后,如果您使用bar_format的自定义实例,我们可以在tqdm参数字符串中将此统计信息与Parameters中列出的参数一起使用:

b='{l_bar}{bar}| {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_min}{postfix}]'
for i in TqdmExtraFormat(range(2), unit_scale = 60, bar_format=b):
    time.sleep(6)

enter image description here

相关问题