#jobs #pipeline #file #depend #back-end #computing #remote

captain-workflow-manager

在多种后端上运行和管理相互依赖的工作。

1 个不稳定版本

0.1.0 2021年12月20日

#805 in 并发

GPL-3.0-only

35KB
623

这个库帮助您运行相互依赖的工作流。其模块化设计允许在本地、集群或其他远程计算资源上运行工作。


lib.rs:

这个库帮助您运行相互依赖的工作流。其模块化设计允许在本地、集群或其他远程计算资源上运行工作。

考虑以下所示的一组工作,其中使用了两种类型的源文件来生成两种类型的中间文件,而这些中间文件又用于生成最终结果。

                         ┌─────────────────┐
┌─────────────────┐      │  Source File B: │
│  Source File A: │      │    - Param1     │
│    - Param1     │      │    - Param2     │
└─────────┬───────┘      └───────┬─────────┘
          │                      │
          │                      │
          │           ┌──────────┴───────────────┐
          │           │                          │
          │           │                          │
          │           │                          │
          ▼           ▼                          ▼
      ┌──────────────────────┐       ┌──────────────────────┐
      │ Intermediate File A: │       │ Intermediate File B: │
      │   - Param1           │       │   - Param1           │
      │   - Param2           │       │   - Param2           │
      └────────────────┬─────┘       └──────┬───────────────┘
                       │                    │
                       └─────────┬──────────┘
                                 │
                                 │
                                 ▼
                         ┌───────────────┐
                         │ Final Result: │
                         │   - Param1    │
                         │   - Param2    │
                         └───────────────┘

每种类型的文件都有一个或多个“参数”。

这种依赖关系可以通过以下Job枚举表示,假设Param1是整数,Param2是字符串

enum Job {
    SourceFileA {param1: u16},
    SourceFileB {param1: u16, param2: &'static str},
    IntermediateFileA {param1: u16, param2: &'static str},
    IntermediateFileB {param1: u16, param2: &'static str},
    FinalResult {param1: u16, param2: &'static str},
}

要使用captain管理此组工作,首先需要在它上实现JobUnit特质。然后使用工作Scheduler运行它。运行它的后端是通过选择一个ExecutorBuilder来选择的。

依赖

~4.5–6.5MB
~109K SLoC