AdaptiveTransferSpeed¶
AdaptiveTransferSpeed averages transfer speed over a short window.
Reach for it when the transfer rate fluctuates and FileTransferSpeed,
which averages over the whole run, reacts too slowly to the swings. The
windowed average only fills in once several updates have landed more
than a fraction of a second apart. Until then it renders “0.0 B/s”.
- class progressbar.widgets.AdaptiveTransferSpeed(**kwargs: Any)[source]
Bases:
FileTransferSpeed,SamplesMixinWidget for showing the transfer speed based on the last X samples.
Create an AdaptiveTransferSpeed (see FileTransferSpeed).
Example¶
"""``AdaptiveTransferSpeed`` averages transfer speed over a short window.
Reach for it when the transfer rate itself fluctuates and a plain
``FileTransferSpeed`` -- which averages over the whole run -- reacts too
slowly to those swings. The windowed average only fills in once several
updates have landed more than a fraction of a second apart, so this
example runs longer and sleeps longer per step than most in this set;
without that, it would render '0.0 B/s' the whole way through.
"""
import random
import time
import progressbar
random.seed(0)
STEPS = 30
def main() -> None:
widgets = [
progressbar.Percentage(),
' ',
progressbar.Bar(),
' ',
progressbar.AdaptiveTransferSpeed(),
]
max_value = 30_000_000
with progressbar.ProgressBar(max_value=max_value, widgets=widgets) as bar:
transferred = 0
for _ in range(STEPS):
transferred += random.randint(500_000, 2_000_000)
bar.update(min(transferred, max_value))
time.sleep(0.02)
if __name__ == '__main__':
main()
See also¶
FileTransferSpeed: the whole-run average this reacts faster than.