#iterator #future #async

iterstream

将迭代器转换为真正的异步流

3个版本

0.1.2 2020年10月23日
0.1.1 2020年10月23日
0.1.0 2020年10月23日

#1389 in 异步

自定义许可

13KB

iterstream

此crate提供了一个可以将Iterator转换为Stream的trait。它使用futures crate创建一个在单独的线程池中获取迭代器值的执行器

它不同于iter()函数,因为迭代器消耗是在单独的线程中完成的。如果迭代器是阻塞的,流将是真正的异步

用于执行任务的ThreadPool可以是自动创建的(当使用to_stream时),或者可以使用to_stream_with_pool显式指定。后者更灵活(也更高效),因为它允许多个流共享同一个池

示例

use iterstream::IterStream;
use futures::stream::StreamExt;
use futures::executor::ThreadPool;

let vals = vec![1, 2, 3, 4, 5];
let stream = vals.into_iter().to_stream_with_pool(10, ThreadPool::new().unwrap());
let c: Vec<_> = stream.collect().await;
assert_eq!(vec![1,2,3,4, 5], c);

作者

  • Michaël Hauspie

许可

依赖项

~0.7–1MB
~18K SLoC