Prefect 的工作原理

只需一个装饰器,即可将 Python 函数转换为可编排的工作流。您的代码和数据保留在您自己的基础设施中——Prefect 负责调度、可观测性和状态管理。

第一步

将 Python 函数转换为工作流(Flows)

为任何 Python 函数添加 @flow 装饰器。无需 YAML,无需复杂的 DSL——只需 Python。您的代码在获得编排能力的同时,依然保持可读性和可测试性。

查看快速入门指南
1
@flow
2def say_hello():
3 for name in ["Marvin", "Arthur", "Ford"]:
4 hello(name)
5
6# Your code stays exactly where it is
7# No special runtime or proprietary formats

第二步

从终端进行部署

使用 Prefect CLI 从您自己的基础设施部署工作流。您可以控制代码的存储位置及其运行方式。工作节点(Workers)在您的环境中执行,并拥有对您资源的完全访问权限。

准备部署...

您的工作节点会轮询我们的 API——无需向您的网络建立入站连接

Prefect Cloud 的混合架构意味着您的代码和数据永远不会离开您的基础设施。工作节点向 Prefect 轮询调度任务,然后在本地执行工作流,并直接访问您的数据库和服务。

Prefect Server
您的网络
控制平面
元数据
Worker
数据

无入站连接

防火墙规则保持锁定

数据保留在本地

直接访问您的数据库

仅限元数据

仅日志和状态,绝不触碰您的数据

第三步

工作节点在您的环境中执行工作流

当任务需要运行时,您基础设施中的工作节点会获取代码、准备资源并执行工作流。所有执行均在本地完成——Prefect 仅接收用于可观测性的日志和状态更新。

工作流执行日志
等待工作流执行...

第四步

将工作流分解为可观测的单个任务(Tasks)

使用 @task 装饰器将复杂的工作流分解为可独立追踪的任务。为每一步获取精细的可观测性和重试逻辑,而无需暴露您的数据——只有执行元数据会到达 Prefect。

免费试用 Prefect Cloud
1@task(retries=3)
2def hello(name: str):
3 print(f"Hello, {name}")
4
5@flow
6def say_hello():
7 # Each task is independently:
8 # - Tracked
9 # - Retried on failure
10 # - Observable in the UI
11 for name in ["Marvin", "Arthur", "Ford"]:
12 hello(name) # Automatic retry if this fails

第五步

自动状态追踪和重试

Prefect 管理工作流运行状态,并在失败时自动进行重试。无需自定义错误处理,您的工作流即可具备弹性。状态转换和日志会发送至 Prefect——您的实际数据则保留在您的基础设施内。

工作流运行状态
运行 1
挂起
运行中
失败
重试 1
重试中
运行中
失败
重试 2
重试中
运行中
已完成

Python 原生工作流。您的基础设施。托管式编排。

从 Prefect Cloud 的免费层开始,或安装自托管版本——两者都能为您提供相同的 Python 优先体验,确保您的代码和数据保留在您需要的地方。