parallel_worker/lib.rs
1//! # Parallel Worker
2//!
3//! This crate provides a simple interface for running tasks in parallel.
4//! The `Worker` struct is used to dispatch tasks to worker threads and collect the results.
5//! You can wait for results or recieve currently available results.
6//!
7//! ```rust
8//! use parallel_worker::{State, Worker};
9//!
10//! fn main() {
11//! let worker = Worker::new(|n: u64, _s: &State| Some(42));
12//!
13//! worker.add_task(1);
14//! worker.add_task(2);
15//!
16//! assert_eq!(worker.get_blocking(), Some(42));
17//!
18//! worker.add_tasks(0..10);
19//!
20//! assert_eq!(worker.get_iter_blocking().count(), 11);
21//! }
22//! ```
23//!
24//! ## Tasks can be canceled
25//! Canceled tasks will stop executing as soon as they reach a `check_if_cancelled!`.
26//! Results of canceled tasks will be discarded even if they have already been computed.
27//! ```rust
28//! # use parallel_worker::{check_if_cancelled, State, Worker};
29//! # use std::{thread::sleep, time::Duration};
30//! fn main() {
31//! let worker = Worker::new(worker_function);
32//!
33//! worker.add_task(1);
34//!
35//! worker.cancel_tasks();
36//!
37//! assert!(worker.get_blocking().is_none());
38//! }
39//!
40//! fn worker_function(task: u64, state: &State) -> Option<u64> {
41//! for i in 0.. {
42//! sleep(Duration::from_millis(50)); // Do some work
43//! check_if_cancelled!(state); // Check if the task has been canceled
44//! }
45//! Some(42)
46//! }
47//!```
48//! ## Results can be optinal
49//! If a worker returns `None` the result will be discarded.
50//! ```rust
51//! # use parallel_worker::{State, Worker};
52//! fn main() {
53//! let worker = Worker::new(|n: u64, _s: &State| {
54//! if n % 2 == 0 {
55//! Some(n)
56//! } else {
57//! None
58//! }
59//! });
60//!
61//! worker.add_tasks(1..=10);
62//!
63//! assert_eq!(worker.get_iter_blocking().count(), 5);
64//! }
65//! ```
66
67mod cell_utils;
68
69mod task_queue;
70
71mod worker_state;
72pub use crate::worker_state::State;
73
74mod worker;
75pub use crate::worker::Worker;