parail

Crates.ioparail
lib.rsparail
version
sourcesrc
created_at2025-03-08 12:05:29.680408+00
updated_at2025-03-23 04:43:49.722913+00
descriptionEasily switch between sequential and parallel.
homepagehttps://github.com/kan1-u/parail
repository
max_upload_size
id1584358
Cargo.toml error:TOML parse error at line 18, column 1 | 18 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
Kanichi Uegaki (kan1-u)

documentation

https://docs.rs/parail

README

Parail

Parail is easily switch between sequential and parallel.

Usage

Add this to your Cargo.toml:

[dependencies]
parail = { version = "0.1", features = ["iter", "stream"] }

Examples

Parallel for Iterator

Use rayon as a parallel processing backend.

use parail::prelude::*;

fn main() {
    let values = (0..10).collect::<Vec<u64>>();
    let result = values.into_iter().par_map(do_something).collect::<Vec<_>>();
    println!("result: {:?}", result);
}

fn do_something(n: u64) -> u64 {
    std::thread::sleep(std::time::Duration::from_secs(1));
    println!("do something: {}", n);
    n + 1
}

Output example:

do something: 4
do something: 6
do something: 7
do something: 1
do something: 0
do something: 5
do something: 3
do something: 2
do something: 8
do something: 9
result: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Parallel for futures::Stream

Use tokio as a parallel processing backend.

use futures::StreamExt;
use parail::prelude::*;

#[tokio::main]
async fn main() {
    let stream = futures::stream::iter(0..10);
    let result = stream.par_map_async(do_something).collect::<Vec<_>>().await;
    println!("result: {:?}", result);
}

async fn do_something(n: u64) -> u64 {
    tokio::time::sleep(std::time::Duration::from_secs(1)).await;
    println!("do something: {}", n);
    n + 1
}

Output example:

do something: 6
do something: 8
do something: 9
do something: 0
do something: 1
do something: 2
do something: 7
do something: 3
do something: 5
do something: 4
result: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Implemented functions

More features will be added as needed.

  • for Iterator
    • par_map
    • par_filter
    • par_filter_map
  • for futures::Stream
    • par_map
    • par_map_async
    • par_filter
    • par_filter_map
    • par_filter_map_async
Commit count: 0

cargo fmt