这篇教程的目的是通过一个简单的示例介绍 ecFlow 的功能。
每个章节介绍一个新概念,并提供一系列任务。大部分章节都附带在线 ecflow 文档的链接,便于读者查看。
多个 task 可以组成 family, family 可以属于另外的 family 或者属于 suite。 所有的实体(task,family,suite)都叫做 node, 构成一个层次树。
有两个主要方法向 ecflow_server 描述 suite 定义(suite definition):文本文件,python API接口
文本文件
语法参见《Definition file Grammar》
Python接口
推荐方式,提供更多功能
译者注:强烈建议使用 Python 接口,这也是 ecFlow 的优势之一。文本定义语法编写判断、循环及定义函数的能力很弱,def 文件很难复用。
ecf script 是对应 suite 定义中 task 的文本文件。 脚本定义任务重需要运行的主要工作,包含 child command 调用,特殊注释,以及为用户提供信息的说明段落。
child command 是 ecflow_client 的命令子集,
实现与 ecflow_server
的通讯。
这些命令通知服务器某任务已经开始,完成,出错,或设置某些事件(event)。
ecflow_server
启动后,可以加载 suite definition
用户接着启动 ecflow_server
中的调度器(scheduling)
调度器会每分钟检查 suite definition 的依赖关系(dependencies)。 如果满足依赖关系,服务器会提交任务(task)。 这个过程叫做作业生成(job creation)。 任务(task)对应的运行过程被称为作业(job)。
运行中的作业使用 child command 与服务器通信。这些会导致:
ecFlow 有专用的 GUI 客户端,叫做 ecflow_ui,用于可视化和监控:
ecflow_ui
提供一系列使用 ecflow_client 命令的工具与服务器交互。