#progress-bar #tqdm #iterator #stream

zzz

Fast progress bar with sane defaults

10 unstable releases (3 breaking)

0.3.1 Jun 18, 2023
0.3.0 Jun 10, 2023
0.2.1 May 30, 2023
0.2.0 Jan 16, 2023
0.0.0 Oct 24, 2020

#6 in #progress-bar

Download history 128/week @ 2023-06-08 65/week @ 2023-06-15 21/week @ 2023-06-22 43/week @ 2023-06-29 44/week @ 2023-07-06 40/week @ 2023-07-13 40/week @ 2023-07-20 70/week @ 2023-07-27 14/week @ 2023-08-03 17/week @ 2023-08-10 55/week @ 2023-08-17 162/week @ 2023-08-24 6/week @ 2023-08-31 29/week @ 2023-09-07 29/week @ 2023-09-14 20/week @ 2023-09-21

87 downloads per month
Used in cotton

MIT/Apache

30KB
519 lines

💤

Crates.io docs.rs MIT licensed Apache 2.0 licensed

The progress bar with sane defaults that doesn't slow down your loops. Inspired by tqdm.

Screenshot

[dependencies]
zzz = "0.3"

Features

  • Seamless integration with iterators and streams
    • If possible, zzz infers the target size from size_hint()
  • Automagically determines and updates a good printing frequency
  • Very low overhead: doesn't slow down your loop, pretty much no matter how simple the loop body. On Skylake, the average overhead per iteration for a
    • !Sync/add based progress bar is 3 CPU cycles
    • Sync/add_sync based progress bar is ~40 CPU cycles (depends on how many threads are updating the shared state)

Cargo Features

  • streams: Enables support for .progress() on async streams (futures::streams::Stream)

Usage examples

Adding a progress bar to an iterator

use zzz::ProgressBarIterExt as _;

for _ in (0..1000).into_iter().progress() {
    //                         ^^^^^^^^
}

If size_hint() for the iterator defines an upper bound, it is automatically taken as the target. Otherwise, a progress indicator ("spinner") is displayed.

Manually creating and advancing a progress bar

use zzz::ProgressBar;

let mut pb = ProgressBar::with_target(1234);
for _ in 0..1234 {
    pb.add(1);
}

Manually creating a spinner (for unknown target progress indicator)

use zzz::ProgressBar;

let mut pb = ProgressBar::spinner();
for _ in 0..5678 {
    pb.add(1);
}

Dependencies

~185KB