rust-concurrent

Crates.iorust-concurrent
lib.rsrust-concurrent
version1.3.0
sourcesrc
created_at2024-04-16 12:08:09.326294
updated_at2024-04-16 12:08:09.326294
descriptionFast command line app in rust/tokio to run commands in parallel. Similar interface to GNU parallel or xargs.
homepage
repositoryhttps://github.com/aaronriekenberg/rust-parallel
max_upload_size
id1210232
size276,603
(gfuzztip)

documentation

README

rust-parallel

Crates.io CI workflow

Run commands in parallel and aggregate outputs. Async application using tokio.

Example commands and detailed manual.

Listed in Awesome Rust - utilities

Similar interface to GNU Parallel or xargs plus useful features:

Contents:

Installation:

Recommended:

  1. Download a pre-built release from Github Releases for Linux, MacOS, or Windows.
  2. Extract the executable and put somewhere in your $PATH.

For manual installation/update:

  1. Install Rust
  2. Install the latest version of this app from crates.io:
$ cargo install rust-parallel   
  1. The same cargo install rust-parallel command will also update to the latest version after initial installation.

Documents:

  1. Examples - complete runnable commands to give an idea of overall features.
  2. Manual - more detailed manual on how to use individual features.
  3. Benchmarks
  4. Output Interleaving - output interleaving in rust-parallel compared with other commands.

Tech Stack:

  • anyhow used for application error handling to propogate and format fatal errors.
  • clap command line argument parser.
  • itertools using multi_cartesian_product to process ::: command line inputs.
  • indicatif optional TUI progress bar.
  • regex optional regular expression capture groups processing for -r/--regex option.
  • tokio asynchronous runtime for rust. From tokio this app uses:
    • async / await functions (aka coroutines)
    • Singleton CommandLineArgs instance using tokio::sync::OnceCell.
    • Asynchronous command execution using tokio::process::Command
    • tokio::sync::Semaphore used to limit number of commands that run concurrently.
    • tokio::sync::mpsc::channel used to receive inputs from input task, and to send command outputs to an output writer task. To await command completions, use the elegant property that when all Senders are dropped the channel is closed.
  • tracing structured debug and warning logs.
  • which used to resolve command paths for path cache.
Commit count: 972

cargo fmt