16 个不稳定版本 (6 个重大更改)

0.7.0 2024年4月2日
0.6.0 2023年10月19日
0.5.2 2023年8月26日
0.5.1 2023年7月27日
0.3.1 2022年2月25日

#99 in 命令行界面

Download history 5222/week @ 2024-04-20 4930/week @ 2024-04-27 4786/week @ 2024-05-04 5349/week @ 2024-05-11 4426/week @ 2024-05-18 4604/week @ 2024-05-25 6522/week @ 2024-06-01 5401/week @ 2024-06-08 5270/week @ 2024-06-15 4531/week @ 2024-06-22 5013/week @ 2024-06-29 4021/week @ 2024-07-06 4174/week @ 2024-07-13 4557/week @ 2024-07-20 5555/week @ 2024-07-27 5954/week @ 2024-08-03

每月下载量 20,986
7 crates 中使用

MIT/Apache

265KB
460 行代码

tqdm Crates.io Version Crates.io Downloads Crates.io MSRV

立即让你的循环显示智能进度条 - 只需用 tqdm(iterable) 包装任何可迭代对象,然后你就完成了!

Rust 对 Python 命令行进度条工具 tqdm 的实现。名字 "tqdm" 来自阿拉伯语单词 taqaddum (تقدّم),意为 "进步",也是西班牙语中 "我爱你如此之多"(te quiero demasiado)的缩写。

demo

快速入门

简单地将 tqdm::tqdm() 包装在任意的 可迭代对象

use tqdm::tqdm;
for i in tqdm(0..10000) {
    /* Your loop logic here */
}

此函数返回一个包装迭代器,当调用 next 时,它会推进进度条。通过使用 自动引用 特性来绕过原始可迭代对象的方法,以便无需开销地调用它们。

 76%|███████████████▉     | 7618/10000 [00:09<00:03, 782.14it/s]

用法

可以就地配置样式和其他参数

use tqdm::Style;
for i in tqdm(0..100)
    .style(Style::Balloon)
    .desc(Some("some description")) {
    /* Your loop logic here */
}
 47%|**********.          | 4792/10000 [00:06<00:06, 783.39it/s]

通过将 tqdm::Iter 特性公开来允许方法链式调用

use tqdm::Iter;
for i in (0..).take(10000).tqdm() {
    /* Your loop logic here */
}

或者,使用 tqdm::pbar() 创建进度条并手动更新它

use tqdm::pbar;
let mut pbar = pbar(Some(44850));

for i in 0..300 {
    pbar.update(i).unwrap();
    /* Your loop logic here */
}

高级用法

也支持多进度条!Tqdm 使用全局注册表来处理多个进度条

use tqdm::tqdm;
for t in (0..3) {
    std::thread::spawn(move || {
        for i in tqdm(0..).desc(Some(i)) {
            /* Your loop logic here */
        }
    })
}
 38%|##########0               | 77/200 [00:00<00:01, 83.24it/s]
 77%|████████████████████      | 77/100 [00:00<00:00, 83.24it/s]
 19%|*****.                    | 77/400 [00:00<00:03, 83.24it/s]

可以使用 tqdm::tqdm_async() 跟踪异步迭代器项(可能需要异步运行时,如 tokio

use tqdm::tqdm_async;

#[tokio::main]
async fn main() {
    use tokio::time::{sleep, Duration};
    let future_iter = (0..100).map(|i| sleep(Duration::from_secs_f64(i as f64 / 100.0)));
    futures::future::join_all(tqdm_async(future_iter)).await;
}

有关更多用法,请参阅 文档

许可证

Crates.io License

依赖项

~1.6–9.5MB
~75K SLoC