Prefect 简介#

Prefect 是用于在 Python 中构建弹性数据管道的工作流编排框架。

Prefect 特性#

Prefect 3.0 为 OSS 产品引入了多项增强功能:包括新的事件和自动化后端,用于驱动事件工作流和可观察性;提升了运行时性能;实现了自主任务执行;以及基于事务语义的简化缓存层。

开源事件和自动化系统#

Prefect 3.0 重大特性是在开源包中引入了事件和自动化系统。此前这一系统仅在 Prefect Cloud 中可用,现在所有用户都可以创建基于可观察事件的存在或缺失来驱动的工作流,并实现系统自动化。

借助这一新功能,您可以根据特定的事件负载触发动作,如果某些条件不满足则取消运行,或者基于外部事件自动化工作流的执行。例如,当一个新文件被上传到S3存储桶时,可以自动启动数据处理管道。该系统还使您能够接收各种系统健康事件的通知,从而为您提供对工作流更大的可见性和控制力。

新的事务性接口#

Prefect 3.0 中另一个重大新增功能是新的事务性(transactional)接口。这一强大特性让构建具有弹性和幂等性的管道变得前所未有的简单。通过事务性接口,你可以将任务分组到事务中,自动在失败时回滚副作用,并显著提高你的管道的幂等性和弹性。

例如,你可以为任务定义回滚行为,确保如果事务失败,任何副作用都能被干净地逆转。这对于维护涉及多个步骤或外部系统的复杂工作流中的数据一致性特别有用。

灵活的任务执行#

Prefect 3.0对任务运行的位置没有限制。任务可以嵌套在其他任务内,允许更灵活和模块化的工作流;它们也可以在流程外被调用,基本上使Prefect能够作为一个后台任务服务运行。你现在可以独立运行任务,异步应用它们,或根据需要延迟它们的执行。这种灵活性为你的数据管道中的任务管理和执行策略打开了新的可能性。

增强的客户端引擎#

Prefect 3.0配备了经过彻底重做的客户端引擎,带来了几项改进。你现在可以将任务嵌套在其他任务内,为你的工作流程增加了一个新的模块化层次。该引擎还支持生成器任务,允许更灵活高效地处理迭代过程。

最显著的变化之一是,所有代码现在默认在主线程上运行。这一变化提高了性能,并导致更直观的行为,特别是在处理共享资源或非线程安全操作时。

改进的工件和变量#

Prefect 3.0通过引入进度条和图像工件等新类型,增强了工件系统。这些新增功能使任务输出更加丰富、更具有信息性,从而提高了工作流的可观察性。

变量系统也进行了升级,现在支持任意JSON格式,而不仅仅是字符串。这种扩展使得能够以变量形式存储和检索更复杂和结构化的数据,增加了工作流配置的灵活性。

工作者#

工作者首次在 Prefect 2.0 中作为新一代代理(agent)引入,现在是 Prefect 3.0 的标准配置。工作者(Workers)为基础设施提供了更强的治理模型,改善了对作业和工作池/队列健康的监控,并在选择计算层时提供了更多灵活性,从而为跨各种环境管理工作流执行提供了一个更健壮和可扩展的解决方案。

性能提升#

Prefect 3.0 不仅带来了新功能;它还提供了显著的性能改进。在 Dask 和 Ray 这样的分布式系统上运行大规模并行工作流的用户将会注意到显著的速度提升。在某些基准测试案例中,我们观察到运行时开销减少了高达98%。这些性能提升直接转化为更快的执行时间和更高效的资源利用率,用于您的数据管道。

安装 Prefect#

Prefect 作为 Python 包发布,它需要 Python 3.9 或更高版本。建议在 Python 虚拟环境中安装 Prefect。

要使用 pip 安装 Prefect,请运行:

pip install prefect

为了确保安装成功,请运行以下命令:

!prefect version
Version:             3.1.4
API version:         0.8.4
Python version:      3.12.7
Git commit:          78ee41cb
Built:               Wed, Nov 20, 2024 7:37 PM
OS/Arch:             linux/x86_64
Profile:             ephemeral
Server type:         ephemeral
Pydantic version:    2.10.2
Server:
  Database:          sqlite
  SQLite version:    3.45.3