python-progressbar 库 - 反向 FileTransferSpeed

python-progressbar library - inverse FileTransferSpeed

我提交了关于此的问题,但想在这里询问任何 workarounds/solutions。

对于许多缓慢移动的循环,传输速度将类似于 .01 B/s 或 .00 B/s,这是非常无用的。对于这些情况,有没有办法显示 s/B? 175 s/B 更具描述性和帮助性。你有我现在可以使用的解决方法吗?因为看到 .00 B/s 并不能告诉我我的循环速度有多快。

https://github.com/WoLpH/python-progressbar/issues/25

在搜索进度条的代码并模拟 FileTransferSpeed class 之后,这是我想出的解决方案,您可以直接输入代码而不是 FileTransferSpeed()

class InvFileTransferSpeed(Widget):
  'Widget for showing the transfer speed (useful for file transfers).'

  format = '%6.2f %ss/%s'
  prefixes = ' kMGTPEZY'
  __slots__ = ('unit', 'format')

  def __init__(self, unit='loop'):
    self.unit = unit

  def update(self, pbar):
    'Updates the widget with the current SI prefixed speed.'

    if pbar.seconds_elapsed < 2e-10 or pbar.currval < 2e-10: # =~ 0
      scaled = power = 0
    else:
      speed = pbar.seconds_elapsed / pbar.currval 
      power = int(math.log(speed, 1000))
      scaled = speed / 1000.**power

    return self.format % (scaled, self.prefixes[power], self.unit)

请注意,这将使用千秒、兆秒等单位,而不是分钟和天 >.<.