软件特性

runjob为每个任务创建了一个任务对象,在内部维护了一个运行时任务队列,并根据用户定义的任务依赖关系,创建出任务依赖的有向无环图DAG(Directed acyclic graph)对象。可灵活控制并行运行的任务量,并及时根据任务依赖关系运行新的任务。

主要特性

  • 支持本地任务、SGE集群任务、Slurm集群任务的管理。

  • 每个任务都唯一对应一个日志文件,记录着任务的全部输出和任务运行状态。

  • 任务运行失败时可以选择是否将任务重新提交到任务队列。

  • 程序中断时重新运行,会自动跳过运行成功的任务,只运行失败或还未运行的任务。

  • 程序被kill或者终止的情况,会自动清理由程序创建出来的任务,避免计算资源的浪费。

  • 在shell脚本中的任务也支持为每行命令定义运行时使用的cpu和内存资源。

  • 支持通过参数选择只想要运行的部分任务而不是全部任务,部分运行的任务也能自动跳过已经运行成功的任务。

  • 支持自定义任务运行前或任务运行结束后的initcallback功能。

  • 支持 envs/vars 变量展开,自动按笛卡尔积生成组合任务。

  • 支持 includes 引入外部规则文件,复用任务定义。

  • 支持通过 --dag--dag-extend 输出任务依赖图。

  • ……

主要模块对象

  • class RunJob()

    封装了shell脚本任务处理对象,提供了任务检查、投递、状态监控、日志输出、异常处理相关方法。

  • class RunFlow()

    封装了job文件格式任务的处理对象,继承自 RunJob,提供了任务依赖图构建、扩展等流程编排方法。

  • class JobQueue()

    封装了运行中的任务队列,基于 OrderedSet 实现,用于控制和记录任务运行。

  • class Job(Jobutils)

    封装了提交任务的对象,记录着任务的命令、依赖关系、资源、状态等信息,提供了任务检查、任务输出等方法。

  • class Jobfile() / Shellfile()

    封装了任务文件输入的对象,提供了用户输入任务的相关属性和方法。Shellfile 用于 shell 脚本格式解析,Jobfile 用于 job 格式解析。

  • class DAG()

    封装了任务依赖的有向无环图对象,记录着任务节点的依赖关系和依赖处理方法。

  • class Config()

    封装了配置文件和参数相关的对象,用于参数和配置文件的解析和输出。