4 个版本
0.2.2 | 2019年6月12日 |
---|---|
0.2.1 | 2018年4月29日 |
0.1.1 | 2017年12月9日 |
0.1.0 | 2017年12月8日 |
#612 在 并发 中
43KB
794 行
rgraph
任务图,执行由依赖定义的任务。
描述
此库提供了定义任务有向无环图(DAG)的机制。一旦生成图,可以实例化求解器对象来执行定义的任何任务。为了满足任务的输入,所有生产者任务都将被执行。
任务可以像定义函数一样定义,它需要
- 一个名称
- 一个输入列表,可能为空。
- 一个输出列表,也可以为空。
- 主体,执行将输入转换为输出的必要代码。
create_node!
宏将帮助您完成这项任务
create_node!(
task_name (a: u32, b : u32) -> (output: u32) {
// return is done by assigning to the output variable
output = a + b;
}
)
任务的主体将由移动 lambda 执行,这强制执行一些保证。尽管如此,如果任务需要执行一些副作用,您可能需要注意以下几点
- 对象需要克隆到任务作用域中。
- 此时只能检查运行时借用。
- 求解器不知道通过全局访问执行的数据更改。它仅跟踪作为任务输入或输出的已注册资源。因此,只要输入没有变化,任务可能就不会再次执行。这可能会导致由于要求声明不正确而没有发生的副作用。
一旦定义了任务,就可以将输入资源绑定到其他任务产生的输出,或者直接输入到求解器。
g.bind_asset("task1::out_asset", "task2::in_asset").unwrap()
功能
- 从图描述自动推导图顺序
- 可缓存的运行:如果两次运行之间没有输入发生变化,则不会执行节点。
- Dot 打印器,对于调试非常有用
待办事项列表
- 在输入中添加标记以选择从上次运行而不是本次运行的副本。
依赖项
~55KB