NovaOrchestration/WorkflowEngines/pyutilib workflow
pyutilab.workflow 说明
总结
pyutilab.workflow 是 pyutilab 的一部分,这是一个 Python 包的集合,旨在支持 桑迪亚国家实验室 的工作。
该库主要开发用于支持桑迪亚实验室的科学工作流自动化,并已公开发布。尚不清楚该库在桑迪亚实验室之外的使用范围如何,但它正在积极维护。
它是一个纯 Python 库。它有一个外部依赖项 argparse,以及对 pyutilib 库其他部分的依赖,这些依赖项会自动安装。
文档主要是一篇概述论文,代码级别的文档很少或没有。代码干净,并且有单元测试。没有验证覆盖率,但测试看起来是合理的。
- 打包
- 软件包列在 Python 软件包索引中,并且
installable with easy_install http://pypi.python.org/pypi/pyutilib.workflow/2.2.4.
- Python 版本
- Python 2.4、2.5 或 2.6(2.4 已弃用)。我使用 Python 2.7 没有问题。
- 文档
- https://software.sandia.gov/svn/public/pyutilib/pyutilib.workflow/trunk/doc/workflow/workflow.pdf
- 依赖项
- pyutilib 的其他部分,由安装程序处理。此外,argparse(从 2.7 / 3.2 开始在标准库中)。
功能性
该库提供两个核心对象 - 一个 Workflow 和一个 Task。Workflow 定义了一系列步骤,由一个或多个 Task 定义。Task 声明了它的输入和输出,并负责将输入数据映射到输出数据。Task 具有一个 execute 方法,执行实际的工作。
通过创建 Task、定义 Task 输入和输出之间的连接,然后将 Task 添加到 Workflow 来定义 Workflow。语法简洁明了。在后台,Connector 对象被创建以表示连接。
Workflow 不限于简单的序列 - 它们还支持扇出和扇入。扇出允许一个输出端口连接到多个输入。在这种情况下,数据将被复制到多个输入端口。扇入允许一个输入端口连接到多个输出。在扇入的情况下,多个输入可以附加到一个列表中,或者可以存储在以输出端口 ID 为索引的字典中。
Workflow 具有基于第一个和最后一个 Task 的输入和输出的隐式输入和输出。通过将其作为函数调用(object.call())并传入初始值来执行 Workflow。结果是一个类似字典的对象,包含输出端口名称和值。
请参阅 attachment:workflow1.py 以获取代码示例。这只是一个发明的流程,大致模拟了 openstack 操作。
通用评论
代码不错,该库也比较容易使用。
可以嵌套 Workflow 和 Task,以创建更大的流程。
错误处理还不错;我大部分逻辑错误在 Workflow 组装时会产生合理的错误。如果链接真的搞乱了,有些错误会让人挠头。
该库基于数据流,它不是 Petri 网或状态机。它具有扇出和扇入功能,但没有决策或迭代。
当 Workflow 运行时,它基本上是同步的。它可能可以在线程中启动,但没有在运行时查询其状态的概念。
独立的 Task 不会并发运行,也没有内部线程支持或任何类似的东西。
该库支持“资源”概念,这是一种协调访问共享资源(通常是文件)的简单方法。它不是真正的锁定。
流程背后没有状态持久化,一切都在内存中。
没有专门支持处理用户代码中的异常,因此异常将直接从 Workflow 中传播出去。在内部,库会捕获错误并生成与其他代码类似的异常。
没有 Workflow 的导入/导出或打印功能。