#parallel #iterator #threads

parallel-iterator

Parallelize any iterator with ease!

7 releases

Uses old Rust 2015

0.1.6 Jul 15, 2020
0.1.5 Aug 24, 2019
0.1.4 Jan 9, 2019
0.1.3 Dec 25, 2018

#220 in Concurrency

Download history 6/week @ 2022-04-13 5/week @ 2022-04-20 56/week @ 2022-04-27 48/week @ 2022-05-04 111/week @ 2022-05-11 37/week @ 2022-05-18 33/week @ 2022-05-25 70/week @ 2022-06-01 22/week @ 2022-06-08 8/week @ 2022-06-15 9/week @ 2022-06-22 5/week @ 2022-06-29 10/week @ 2022-07-06 18/week @ 2022-07-13 14/week @ 2022-07-20 26/week @ 2022-07-27

68 downloads per month
Used in treesum

Apache-2.0/MIT

10KB
93 lines

parallel-iterator

unsafe forbidden

Parallelize any iterator!

Features

  • Support for !Send and !Sync for producer iterators and transform closures. This allows mutable, safe and easy thread local data, using the captured closure environments.
  • Propagates child thread panics.
  • Internal thread handling, don't worry about it! (TODO: make this configurable)

A minimal example

This code is copy-pasted from examples/example_1.rs.

extern crate parallel_iterator;

use parallel_iterator::ParallelIterator;

fn do_some_work(i: u32) -> u32 {
    i + 1 // let's pretend this is a heavy calculation
}

fn main() {
    for i in ParallelIterator::new(|| (0u32..100), || do_some_work) {
    	println!("Got a result: {}!", i);
    }
}

A slightly more realistic example

This code is copy-pasted from examples/example_2.rs.

extern crate parallel_iterator;

use parallel_iterator::ParallelIterator;

fn do_some_work(i: usize, out: &mut Vec<usize>) {
    for j in 0..i {
        out.push(j); // The caller can pre-allocate.
    }
}

fn main() {
    const MAX: usize = 1000;
    let xform_ctor = || {
        let mut buffer = Vec::with_capacity(MAX);
        move |i| {
            buffer.clear(); // Clear but keep the internal allocation.
            do_some_work(i, &mut buffer);
            buffer.last().map(|u| *u) // This is just an example value.
        }
    };
    for i in ParallelIterator::new(|| (0..MAX), xform_ctor) {
        match i {
            Some(i) => println!("Got Some({})!", i),
            None => println!("Got None!"),
        }
    }
}

Please see the documentation on the ParallelIterator struct for more details.

Changelog

0.1.6

  • Updated dependencies.

0.1.5

  • Updated dependencies.

0.1.4

  • Added examples.
  • Improved documentation.
  • Updated dependencies.

0.1.3

  • Switched to crossbeam-channel instead of chan.
  • Updated dependencies.

0.1.2

  • Updated dependencies.

0.1.1

  • Removed dead code in the minimal example.

0.1.0

  • Initial publish.

License

Licensed under either of

at your option.

Dependencies

~435KB