6 个版本
使用旧的 Rust 2015
0.4.0 | 2018 年 9 月 5 日 |
---|---|
0.3.0 | 2018 年 6 月 23 日 |
0.2.2-pre | 2018 年 6 月 21 日 |
#1286 在 开发工具
105KB
2.5K SLoC
Rain 的 Rust 执行器库
Rain 是一个开源的分布式计算框架,用于处理大规模基于任务的流水线。
Rain 旨在降低分布式计算的入门门槛。我们的目标是提供一个轻量级且健壮的分布式框架,它具有直观的 Python API、简单的安装和部署,并在其上提供深入的监控。
这是用于在 Rust 中编写自己的 Rain 任务的 Rain 库。查看项目的 GitHub 仓库。
实现您的任务
以以下方式实现您的任务
#[macro_use] // For register_task! if you want to use it
use rain_task::*;
// Generic task tages arrays of inputs and outputs
fn task_hello(ctx: &mut Context, inputs: &[DataInstance], outputs: &mut [Output]) -> TaskResult<()> { ... }
// Or you can have a funtion with the individual parameters
fn task_world(ctx: &mut Context, in1: &DataInstance, in2: &DataInstance, out: &mut Output) -> TaskResult<()> { ... }
然后创建一个具有以下 main
函数的二进制目标
fn main() {
let mut s = Executor::new("greeter"); // The executor type name
// Generic tasks are registered with a function
s.register_task("hello", task_hello);
// For individual parameters, use a macro. `[I I O]` specifies the type and order of parameters (after Context)
register_task!(s, "world", [I I O], task_world);
s.run(); // Runs the executor event loop
}
运行
执行器由一个守护程序在一个专用的工作目录中运行。守护程序参数通过环境变量传递,因此您可以使用任何参数解析。
在运行 Executor::run()
之前,您可能想设置一个 rust logger。然而,日志不如任务(无论是成功还是失败)返回的调试/错误消息方便访问。
任务函数在为其设置的工作目录中运行,该目录是一个专用的空目录,之后会为您清理。
错误处理
执行器库具有简化的错误处理:自身库(例如将数据写入已设置为外部文件的输出)的使用错误会导致恐慌。任何可能导致不一致状态(或难以恢复)的情况都会导致恐慌。这包括库代码中所有的I/O错误(除了impl Write for Output
I/O错误)。
任务函数本身通常应该在执行器处于一致状态的情况下返回Err
。这主要包括大多数任务使用错误,即任务用户在图中提供了错误类型或输入数量,错误的输入值或内容类型等。但在此情况下恐慌也是可接受的。
理由是,执行器的崩溃会以适当的方式报告给用户,并且是处理执行器中任意错误的一种干净且安全的方式。虽然重启执行器可能是一个昂贵的操作,但它预计是很少发生的。使用这种逻辑,即使任务使用错误也可能恐慌,但不会造成重大的损失,但更喜欢返回错误,因为这可能保留更多元数据。
依赖项
~47MB
~798K SLoC