Crates.io | iterstream |
lib.rs | iterstream |
version | 0.1.2 |
source | src |
created_at | 2020-10-23 14:28:50.846226 |
updated_at | 2020-10-23 14:46:53.615461 |
description | Converts Iterator into real asynchronous Stream |
homepage | |
repository | https://gitlab.univ-lille.fr/michael.hauspie/iterstream |
max_upload_size | |
id | 304686 |
size | 37,207 |
iterstream
This crate provides a trait that can convert an Iterator
to a
Stream
. It uses the futures
crate to create an executor that
gets the values from the iterator in a separate thread pool
It differs from the iter()
function
because iterator consumption is done in a separate thread. The
stream is then really asynchronous if the iterator is blocking
The ThreadPool
needed to execute tasks can be either create
automatically (when using
to_stream
), or explicitly
specified using
to_stream_with_pool
. The
later is more flexible (and efficient) as it allows to share the
same pool for multiple streams
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);