python-progressbar 库 - 反向 FileTransferSpeed
python-progressbar library - inverse FileTransferSpeed
我提交了关于此的问题,但想在这里询问任何 workarounds/solutions。
对于许多缓慢移动的循环,传输速度将类似于 .01 B/s 或 .00 B/s,这是非常无用的。对于这些情况,有没有办法显示 s/B? 175 s/B 更具描述性和帮助性。你有我现在可以使用的解决方法吗?因为看到 .00 B/s 并不能告诉我我的循环速度有多快。
在搜索进度条的代码并模拟 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)
请注意,这将使用千秒、兆秒等单位,而不是分钟和天 >.<.
我提交了关于此的问题,但想在这里询问任何 workarounds/solutions。
对于许多缓慢移动的循环,传输速度将类似于 .01 B/s 或 .00 B/s,这是非常无用的。对于这些情况,有没有办法显示 s/B? 175 s/B 更具描述性和帮助性。你有我现在可以使用的解决方法吗?因为看到 .00 B/s 并不能告诉我我的循环速度有多快。
在搜索进度条的代码并模拟 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)
请注意,这将使用千秒、兆秒等单位,而不是分钟和天 >.<.