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 次下载
120KB
549 行
prog-rs
A Rust 库,可帮助轻松构建进度条。
用法
首先,将以下内容添加到您的 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
。