You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prefect 2.0是否支持在Python类中使用Flow装饰器?

Prefect类内使用Flow的问题解答

Prefect支持在类内部使用Flow和Task装饰器,你遇到的递归错误是代码写法不当导致的,而非框架不支持。

错误原因分析

你的代码存在两个关键问题:

  1. 调用类内的Task方法时没有绑定类实例(self),直接写do_first(..)会导致方法无法正确访问类上下文,进而引发异常或递归。
  2. Flow方法的调用逻辑如果没有正确绑定实例,可能触发意外的递归调用。

修正后的代码示例

from prefect import task, flow

class Algorithm:
    @task
    def do_first(self, something):
        # 实现你的业务逻辑
        return something

    @task
    def do_second(self, something_else):
        # 实现你的业务逻辑
        return something_else

    @flow
    def start_flow(self, input_param):
        # 通过self调用类内的Task方法,绑定实例上下文
        first_output = self.do_first(input_param)
        self.do_second(first_output)

# 实例化类并启动flow
if __name__ == "__main__":
    algo_instance = Algorithm()
    algo_instance.start_flow("your_input_data")

额外注意事项

  • 类内的Task和Flow必须通过类实例(self)调用,确保方法能访问类的状态和上下文。
  • 如果使用静态方法或类方法,需将@staticmethod/@classmethod放在@task装饰器之前,保证装饰器能正确处理方法类型。
  • 递归错误多数是因为调用时未绑定实例,导致方法被重复触发,或者flow内部形成循环调用。

内容的提问来源于stack exchange,提问作者Slava Bugz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 01:05:22