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

Python Prefect 2.9.0报错TypeError: 'fn' must be callable求助

解决Prefect 2.9.0中调度任务的错误问题

你的错误源于Prefect 2.x和1.x的API完全不兼容,你用了1.x的写法在2.9.0版本中,导致Flow初始化时缺少可调用的函数参数,触发TypeError: 'fn' must be callable。以下是修正后的完整代码和关键说明:

修正后的代码

from prefect import flow, task
from prefect.schedules import IntervalSchedule
from datetime import datetime, timedelta

@task
def print_values():
    print("Test 1: " + datetime.now().strftime("%H:%M:%S"))

@flow(name="my-flow")
def my_flow():
    print_values()

# 创建带调度的部署
deployment = Deployment.build_from_flow(
    flow=my_flow,
    name="scheduled-test-deployment",
    schedule=IntervalSchedule(interval=timedelta(seconds=10)),
)

# 应用部署,启动调度
deployment.apply()

关键修改点

  1. Flow定义方式变更
    Prefect 2.x要求flow必须是一个被@flow装饰的可调用函数,不再支持1.x的with Flow(...) as flow上下文写法。这是你触发错误的核心原因。

  2. 调度配置方式变更
    2.x中不再使用run_config来设置调度,而是通过Deployment对象来绑定flow和调度规则。Deployment.build_from_flow可以快速创建带调度的部署,调用apply()后会将部署注册到Prefect服务,自动按照间隔执行任务。

  3. 模块导入保持正确
    确保导入的是Prefect 2.x的flow、task和IntervalSchedule,避免混用1.x的模块。

运行说明

执行代码前,需要启动本地Prefect服务(执行命令prefect server start),部署生效后,任务会自动按照10秒间隔执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:52:14