4 个版本

0.2.0 2020 年 2 月 2 日
0.1.2 2020 年 1 月 31 日
0.1.1 2020 年 1 月 28 日
0.1.0 2020 年 1 月 26 日

#784命令行界面

每月 46 次下载

Apache-2.0

120KB
549

prog-rs

licence

A Rust 库,可帮助轻松构建进度条。

animated screenshot

用法

首先,将以下内容添加到您的 Cargo.toml

[dependencies]
prog_rs = "0.1"

然后,将此内容添加到您的 crate 根目录

extern crate prog_rs;

要在迭代时添加进度条,只需在迭代器后面添加 .progress()

use prog_rs::prelude::*;

fn main() {
    for _ in (0..1_000).progress() {
        std::thread::sleep(std::time::Duration::from_millis(5));
    }
}

可以使用前缀为 with_ 的方法调整某些参数

use prog_rs::prelude::*;

fn main() {
    for _ in (0..1_000)
        .progress()
        .with_prefix("Processing...")
        .with_output_stream(prog_rs::OutputStream::StdErr)
        .with_bar_position(prog_rs::BarPosition::Right)
    {
        do_something();
    }
}

lib.rs:

prog_rs

A Rust 库,可帮助轻松构建进度条。

基本用法

要在迭代时添加进度条,只需在迭代器后面添加 .progress()

use prog_rs::prelude::*;

for _ in (0..1_000).progress() {
    std::thread::sleep(std::time::Duration::from_millis(5));
}

可以使用前缀为 with_ 的方法调整某些参数

use prog_rs::prelude::*;

for _ in (0..1_000)
    .progress()
    .with_prefix("Processing...")
    .with_output_stream(prog_rs::OutputStream::StdErr)
    .with_bar_position(prog_rs::BarPosition::Right)
{
    do_something();
}

高级用法

可以通过在迭代器包装器外部控制进度条来控制进度条的行为

let mut progress = Progress::new()
    .with_bar_width(30)
    .with_extra_infos("Hello, World!")
    .with_refresh_delay(Duration::from_millis(100))
    .with_output_stream(OutputStream::StdErr);

for i in 0..10_000 {
    progress.update(i as f32 / 10_000.).unwrap();
    progress = progress
        .with_extra_infos(format!("Hello, World! ({}/10000)", i + 1));
    sleep(Duration::from_nanos(110));
}

progress.finished().ok();

此相同的行为也适用于文件

use prog_rs::prelude::*;

let f = File::open("../../data/addresses/bano.csv")
    .unwrap()
    .progress()
    .with_prefix(" Read file ...")
    .with_bar_position(BarPosition::Right);
let f = BufReader::new(f);
println!("This file has {} lines", f.lines().count());

性能

进度条重绘速率受到限制,以避免进行大量 I/O 并避免浪费过多的 CPU 时间。

在大多数使用情况下,它不会影响性能,但请避免在使用迭代器非常密集时(超过约 100M 次迭代/秒)使用它。

实现细节

剩余迭代次数是如何计算的?

默认情况下,使用 size_hint 计算剩余迭代次数,如果您想指定更精确的值,可以使用 with_iter_size

依赖项