spawn-wait

Crates.iospawn-wait
lib.rsspawn-wait
version0.2.2
sourcesrc
created_at2022-02-08 17:29:27.779631
updated_at2022-02-09 00:36:42.15202
descriptionSpawn and manage a set of processes each associated with a key, and wait on all or part of them simultaneously.
homepage
repositoryhttps://github.com/micromaomao/rust-spawn-wait
max_upload_size
id529231
size17,037
maowtm (micromaomao)

documentation

https://docs.rs/spawn-wait

README

Crates.io docs.rs

Easily spawn and manage a set of processes.

use std::process::Command;

use spawn_wait::{ProcessSet, SignalHandler, WaitAnyResult};

fn sleep_cmd(secs: i32) -> Command {
  let mut cmd = Command::new("sleep");
  cmd.arg(secs.to_string());
  cmd
}

fn main() {
  let mut procs = ProcessSet::new();

  // You can set a limit on concurrency with ProcessSet::with_concurrency_limit(number).

  // Associate each process with a key (Hash + Eq + Clone)
  procs.add_command(3, sleep_cmd(3));
  procs.add_command(1, sleep_cmd(1));
  procs.add_command(2, sleep_cmd(2));

  let mut sh = SignalHandler::default();
  loop {
    match procs.wait_any(&mut sh) {
      WaitAnyResult::NoProcessesRunning => {
        println!("All done");
        return;
      }
      WaitAnyResult::ReceivedTerminationSignal(_) => {
        // The crate handles SIGINT for you, so you can exit cleanly
        // when the user presses ctrl-c.
        println!("Terminating");
        procs.sigint_all_and_wait(&mut sh).unwrap();
        return;
      }
      WaitAnyResult::Subprocess(id, r) => {
        println!("Process {} finished: {:?}", id, r);
      }
    }
  }
}

Commit count: 7

cargo fmt