3 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2015年12月12日 |
---|---|
0.0.2 | 2015年10月27日 |
0.0.1 | 2015年10月25日 |
#39 in #编排
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