1 stable release
1.3.0 | Apr 16, 2024 |
---|
#610 in Asynchronous
145KB
2.5K
SLoC
rust-parallel
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:
- Run commands from stdin, input files, or
:::
arguments - Automatic parallelism to all cpus, or configure manually
- Transform inputs with regular expressions
- Prevent output interleaving
- Very fast in benchmarks
- Shell mode to run bash functions and commands
- TUI progress bar using indicatif
- Path cache
- Command timeouts
- Structured debug logging
- Dry run mode
- Configurable error handling
Contents:
Installation:
Recommended:
- Download a pre-built release from Github Releases for Linux, MacOS, or Windows.
- Extract the executable and put somewhere in your $PATH.
For manual installation/update:
- Install Rust
- Install the latest version of this app from crates.io:
$ cargo install rust-parallel
- The same
cargo install rust-parallel
command will also update to the latest version after initial installation.
Documents:
- Examples - complete runnable commands to give an idea of overall features.
- Manual - more detailed manual on how to use individual features.
- Benchmarks
- 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 usingtokio::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 allSenders
are dropped the channel is closed.
- tracing structured debug and warning logs.
tracing::Instrument
is used to provide structured debug logs.
- which used to resolve command paths for path cache.
Dependencies
~19–39MB
~563K SLoC