#thread #process #orchestration #running #runner #traits

marid

一个用于运行、等待和停止线程的编排库

3 个不稳定版本

使用旧的 Rust 2015

0.1.0 2015年12月12日
0.0.2 2015年10月27日
0.0.1 2015年10月25日

#39 in #编排

BSD-3-Clause

25KB
579

Marid

文档

一个简单的、可组合的工作线程的进程编排库。受Ifrit golang 库的启发。


lib.rs:

Marid

一个进程编排库。

本库受tedsuo的ifrit(一个类似用于 Golang 的库)的影响。

库的基础建立在Runner特质的概念上,它封装了一个单一的工作单元,例如一个线程,它具有长的生命周期,可能是永久的。《code>Process是一个特质,它定义了一个或多个Runner对象的实际运行。重要的是,《code>Process定义了等待和信号一个Runner的能力。

示例

use marid::{launch, Runner, Process, Composer, FnRunner, Signal};

let mut runner1 = Box::new(FnRunner::new(move |_sig| {
    // Do a bunch of work...
    Ok(())
})) as Box<Runner + Send>;

let mut runner2 = Box::new(FnRunner::new(move |_sig| {
    // Do a bunch of other work...
    Ok(())
})) as Box<Runner + Send>;

let composer = Composer::new(vec!(runner1, runner2), Signal::INT);
let signals = vec!(Signal::INT, Signal::ALRM);

// Start all Runners in separate threads.
let process = launch(composer, signals);

// Wait until all Runners have been setup.
assert!(process.ready().is_ok());

// Send a shutdown signal to all Runners.
process.signal(Signal::INT);

// Wait until all Runners have finished.
assert!(process.wait().is_ok());

依赖项

~0.7–1MB
~13K SLoC