#future #timeout #chunks #stream #adaptor #buffer #full

futures-batch

一个将元素分块并在超时或缓冲区满后刷新的适配器。(以前称为tokio-batch。)

3个不稳定版本

0.6.1 2022年11月21日
0.6.0 2019年12月9日
0.5.0 2019年12月6日

#309 in 异步

Download history 1697/week @ 2024-04-08 2312/week @ 2024-04-15 4270/week @ 2024-04-22 3954/week @ 2024-04-29 4962/week @ 2024-05-06 3179/week @ 2024-05-13 2551/week @ 2024-05-20 3456/week @ 2024-05-27 4410/week @ 2024-06-03 4073/week @ 2024-06-10 4311/week @ 2024-06-17 4049/week @ 2024-06-24 3227/week @ 2024-07-01 6110/week @ 2024-07-08 4017/week @ 2024-07-15 3048/week @ 2024-07-22

16,789 每月下载量
用于 2 crates

MIT/Apache

14KB
206 代码行

futures-batch

Build status Cargo Documentation

一个将流中完成的futures分块并在超时或缓冲区满后刷新的适配器。它基于futures-utilChunks适配器,我们为其添加了超时。

(该项目最初命名为tokio-batch,但因为它不再依赖于Tokio,所以进行了重命名。)

用法

作为独立的流操作符或直接作为组合器

use std::time::Duration;
use futures::{stream, StreamExt};
use futures_batch::ChunksTimeoutStreamExt;

#[tokio::main]
async fn main() {
    let iter = vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9].into_iter();
    let results = stream::iter(iter)
        .chunks_timeout(5, Duration::new(10, 0))
        .collect::<Vec<_>>();

    assert_eq!(vec![vec![0, 1, 2, 3, 4], vec![5, 6, 7, 8, 9]], results.await);
}

上面的代码迭代一个流,并使用10秒的超时创建大小为5的块。
注意: 这是在使用futures 0.3crate。

性能

futures-batch对您的应用程序施加了非常低的开销。例如,它甚至被用来批处理系统调用
在底层,我们使用futures-timer,它允许微秒级定时器分辨率。如果您找到一个未涵盖的使用案例,请不要犹豫,提出一个问题。

致谢

感谢arielb1alexcrichtondoyoubileshowspebernwngr的贡献!

依赖项

~1MB
~16K SLoC