6 个版本 (3 个重大更改)
0.5.1 | 2019年12月6日 |
---|---|
0.5.0 | 2019年11月18日 |
0.4.0 | 2019年10月31日 |
0.2.0 | 2019年2月5日 |
0.1.1 | 2017年10月27日 |
#34 in #adaptor
83 每月下载量
14KB
233 行
tokio-batch
一个将元素分块并在超时或缓冲区满后刷新它们的适配器。
描述
一个将向量中的元素分块的适配器。
此适配器将在达到指定容量或触发预定义超时时,缓冲流中的项目列表,并将用于缓冲的向量传递出去。
用法
作为独立的流操作符或直接作为组合器
use futures::future;
use futures::stream;
use futures::{FutureExt, StreamExt, TryFutureExt};
use std::time::Duration;
use tokio_batch::ChunksTimeoutStreamExt;
fn main() {
let iter = vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9].into_iter();
let v = stream::iter(iter)
.chunks_timeout(5, Duration::new(10, 0))
.collect::<Vec<_>>();
tokio::run(
v.then(|res| {
assert_eq!(vec![vec![0, 1, 2, 3, 4], vec![5, 6, 7, 8, 9]], res);
future::ready(())
})
.unit_error()
.boxed()
.compat(),
);
}
注意:这是使用 futures-preview
包。请查看有关 futures-rs 兼容层的 此博客文章。
性能
tokio-batch
对您的应用程序的开销非常低。例如,它甚至被用来批量处理系统调用 [4]。
在内部,我们使用 futures-timer
,它允许微秒级的定时器分辨率。如果您找到一个未涵盖的使用案例,请不要犹豫,提出问题。
致谢
此代码是从 futures-util 中取出的,并调整到一个单独的包中以提高可重用性。从那时起,它已被修改以支持更高分辨率的定时器。
感谢 arielb1、alexcrichton、doyoubi、spebern、wngr 对他们的贡献!
依赖关系
~4MB
~62K SLoC