Expand description
Traits for writing parallel programs using an iterator-style interface
You will rarely need to interact with this module directly unless you have need to name one of the iterator types.
Parallel iterators make it easy to write iterator-like chains that
execute in parallel: typically all you have to do is convert the
first .iter() (or iter_mut(), into_iter(), etc) method into
par_iter() (or par_iter_mut(), into_par_iter(), etc). For
example, to compute the sum of the squares of a sequence of
integers, one might write:
use rayon::prelude::*;
fn sum_of_squares(input: &[i32]) -> i32 {
    input.par_iter()
         .map(|i| i * i)
         .sum()
}Or, to increment all the integers in a slice, you could write:
use rayon::prelude::*;
fn increment_all(input: &mut [i32]) {
    input.par_iter_mut()
         .for_each(|p| *p += 1);
}To use parallel iterators, first import the traits by adding
something like use rayon::prelude::* to your module. You can
then call par_iter, par_iter_mut, or into_par_iter to get a
parallel iterator. Like a regular iterator, parallel
iterators work by first constructing a computation and then
executing it.
In addition to par_iter() and friends, some types offer other
ways to create (or consume) parallel iterators:
- Slices (&[T],&mut [T]) offer methods likepar_splitandpar_windows, as well as various parallel sorting operations. See theParallelSlicetrait for the full list.
- Strings (&str) offer methods likepar_splitandpar_lines. See theParallelStringtrait for the full list.
- Various collections offer par_extend, which grows a collection given a parallel iterator. (If you don’t have a collection to extend, you can usecollect()to create a new one from scratch.)
To see the full range of methods available on parallel iterators,
check out the ParallelIterator and IndexedParallelIterator
traits.
If you’d like to build a custom parallel iterator, or to write your own combinator, then check out the split function and the plumbing module.
Note: Several of the ParallelIterator methods rely on a Try trait which
has been deliberately obscured from the public API.  This trait is intended
to mirror the unstable std::ops::Try with implementations for Option and
Result, where Some/Ok values will let those iterators continue, but
None/Err values will exit early.
A note about object safety: It is currently not possible to wrap
a ParallelIterator (or any trait that depends on it) using a
Box<dyn ParallelIterator> or other kind of dynamic allocation,
because ParallelIterator is not object-safe.
(This keeps the implementation simpler and allows extra optimizations.)
Modules
- Traits and functions used to implement parallel iteration. These are low-level details – users of parallel iterators should not need to interact with them directly. See theplumbingREADME for a general overview.
Structs
- Chainis an iterator that joins- bafter- ain one continuous iterator. This struct is created by the- chain()method on- ParallelIterator
- Chunksis an iterator that groups elements of an underlying iterator.
- Clonedis an iterator that clones the elements of an underlying iterator.
- Copiedis an iterator that copies the elements of an underlying iterator.
- Iterator adaptor for theempty()function.
- Enumerateis an iterator that returns the current count along with the element. This struct is created by the- enumerate()method on- IndexedParallelIterator
- Filtertakes a predicate- filter_opand filters out elements that match. This struct is created by the- filter()method on- ParallelIterator
- FilterMapcreates an iterator that uses- filter_opto both filter and map elements. This struct is created by the- filter_map()method on- ParallelIterator.
- FlatMapmaps each element to a parallel iterator, then flattens these iterators together. This struct is created by the- flat_map()method on- ParallelIterator
- FlatMapItermaps each element to a serial iterator, then flattens these iterators together. This struct is created by the- flat_map_iter()method on- ParallelIterator
- Flattenturns each element to a parallel iterator, then flattens these iterators together. This struct is created by the- flatten()method on- ParallelIterator.
- FlattenIterturns each element to a serial iterator, then flattens these iterators together. This struct is created by the- flatten_iter()method on- ParallelIterator.
- Foldis an iterator that applies a function over an iterator producing a single value. This struct is created by the- fold()method on- ParallelIterator
- FoldWithis an iterator that applies a function over an iterator producing a single value. This struct is created by the- fold_with()method on- ParallelIterator
- Inspectis an iterator that calls a function with a reference to each element before yielding it.
- Interleaveis an iterator that interleaves elements of iterators- iand- jin one continuous iterator. This struct is created by the- interleave()method on- IndexedParallelIterator
- InterleaveShortestis an iterator that works similarly to- Interleave, but this version stops returning elements once one of the iterators run out.
- Intersperseis an iterator that inserts a particular item between each item of the adapted iterator. This struct is created by the- intersperse()method on- ParallelIterator
- IterBridgeis a parallel iterator that wraps a sequential iterator.
- Mapis an iterator that transforms the elements of an underlying iterator.
- MapInitis an iterator that transforms the elements of an underlying iterator.
- MapWithis an iterator that transforms the elements of an underlying iterator.
- MaxLenis an iterator that imposes a maximum length on iterator splits. This struct is created by the- with_max_len()method on- IndexedParallelIterator
- MinLenis an iterator that imposes a minimum length on iterator splits. This struct is created by the- with_min_len()method on- IndexedParallelIterator
- MultiZipis an iterator that zips up a tuple of parallel iterators to produce tuples of their items.
- Iterator adaptor for theonce()function.
- PanicFuseis an adaptor that wraps an iterator with a fuse in case of panics, to halt all threads as soon as possible.
- Positionstakes a predicate- predicateand filters out elements that match, yielding their indices.
- Iterator adaptor for therepeat()function.
- Iterator adaptor for therepeatn()function.
- Revis an iterator that produces elements in reverse order. This struct is created by the- rev()method on- IndexedParallelIterator
- Skipis an iterator that skips over the first- nelements. This struct is created by the- skip()method on- IndexedParallelIterator
- Splitis a parallel iterator using arbitrary data and a splitting function. This struct is created by the- split()function.
- StepByis an iterator that skips- nelements between each yield, where- nis the given step. This struct is created by the- step_by()method on- IndexedParallelIterator
- Takeis an iterator that iterates over the first- nelements. This struct is created by the- take()method on- IndexedParallelIterator
- TryFoldis an iterator that applies a function over an iterator producing a single value. This struct is created by the- try_fold()method on- ParallelIterator
- TryFoldWithis an iterator that applies a function over an iterator producing a single value. This struct is created by the- try_fold_with()method on- ParallelIterator
- Updateis an iterator that mutates the elements of an underlying iterator before they are yielded.
- WhileSomeis an iterator that yields the- Someelements of an iterator, halting as soon as any- Noneis produced.
- Zipis an iterator that zips up- aand- binto a single iterator of pairs. This struct is created by the- zip()method on- IndexedParallelIterator
- AnIndexedParallelIteratorthat iterates over two parallel iterators of equal length simultaneously.
Enums
- The enumEitherwith variantsLeftandRightis a general purpose sum type with two cases.
Traits
- FromParallelIteratorimplements the creation of a collection from a- ParallelIterator. By implementing- FromParallelIteratorfor a given type, you define how it will be created from an iterator.
- An iterator that supports “random access” to its data, meaning that you can split it at arbitrary indices and draw data from those points.
- IntoParallelIteratorimplements the conversion to a- ParallelIterator.
- IntoParallelRefIteratorimplements the conversion to a- ParallelIterator, providing shared references to the data.
- IntoParallelRefMutIteratorimplements the conversion to a- ParallelIterator, providing mutable references to the data.
- Conversion trait to convert anIteratorto aParallelIterator.
- ParallelDrainFullcreates a parallel iterator that moves all items from a collection while retaining the original capacity.
- ParallelDrainRangecreates a parallel iterator that moves a range of items from a collection while retaining the original capacity.
- ParallelExtendextends an existing collection with items from a- ParallelIterator.
- Parallel version of the standard iterator trait.
Functions
- Creates a parallel iterator that produces nothing.
- Creates a parallel iterator that produces an element exactly once.
- Creates a parallel iterator that endlessly repeatselt(by cloning it). Note that this iterator has “infinite” length, so typically you would want to useziportakeor some other means to shorten it, or consider using therepeatn()function instead.
- Creates a parallel iterator that producesnrepeats ofelt(by cloning it).
- Thesplitfunction takes arbitrary data and a closure that knows how to split it, and turns this into aParallelIterator.