#parallel-iterator #rayon

rayon_iter_concurrent_limit

Limit the concurrency of an individual rayon parallel iterator method with a convenient macro

6 releases

0.2.0 Feb 29, 2024
0.1.0 Feb 19, 2024
0.1.0-alpha4 Feb 18, 2024
0.1.0-alpha3 Feb 4, 2024

#1016 in Concurrency

Download history 493/week @ 2025-06-28 729/week @ 2025-07-05 970/week @ 2025-07-12 677/week @ 2025-07-19 673/week @ 2025-07-26 758/week @ 2025-08-02 850/week @ 2025-08-09 1114/week @ 2025-08-16 1684/week @ 2025-08-23 1651/week @ 2025-08-30 1514/week @ 2025-09-06 1328/week @ 2025-09-13 1947/week @ 2025-09-20 749/week @ 2025-09-27 2023/week @ 2025-10-04 1012/week @ 2025-10-11

6,059 downloads per month
Used in 10 crates (2 directly)

MIT/Apache

21KB
87 lines

rayon_iter_concurrent_limit

Latest Version Documentation msrv build

Limit the concurrency of an individual rayon parallel iterator method with a convenient macro.

The documentation outlines the motivation, implementation, and limitations of this crate.

Example

use rayon::iter::{IntoParallelIterator, ParallelIterator};
use rayon_iter_concurrent_limit::iter_concurrent_limit;

const N: usize = 1000;
let output = iter_concurrent_limit!(2, (0..100), map, |i: usize| -> usize {
    let alloc = vec![i; N];              // max of 2 concurrent allocations
    alloc.into_par_iter().sum::<usize>() // runs on all threads
})
.map(|alloc_sum| -> usize {
    alloc_sum / N                        // max of 2 concurrent executions
})
.collect::<Vec<usize>>();
assert_eq!(output, (0..100).into_iter().collect::<Vec<usize>>());

Licence

rayon_iter_concurrent_limit is licensed under either of

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~1.5MB
~25K SLoC