#up #adaptor #chunks #buffer #timeout #elements #full

tokio-batch

已弃用。请使用 futures-batch。一个将元素分块并在超时或缓冲区满后刷新它们的适配器。

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

Download history 3/week @ 2023-12-01 1/week @ 2023-12-08 15/week @ 2023-12-15 2/week @ 2023-12-22 22/week @ 2024-01-19 10/week @ 2024-01-26 1/week @ 2024-02-02 6/week @ 2024-02-09 11/week @ 2024-02-16 35/week @ 2024-02-23 26/week @ 2024-03-01 9/week @ 2024-03-08

83 每月下载量

MIT/Apache

14KB
233

tokio-batch

Build status

一个将元素分块并在超时或缓冲区满后刷新它们的适配器。

描述

一个将向量中的元素分块的适配器。

此适配器将在达到指定容量或触发预定义超时时,缓冲流中的项目列表,并将用于缓冲的向量传递出去。

用法

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

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 中取出的,并调整到一个单独的包中以提高可重用性。从那时起,它已被修改以支持更高分辨率的定时器。

感谢 arielb1alexcrichtondoyoubispebernwngr 对他们的贡献!

依赖关系

~4MB
~62K SLoC