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()
关键修改点
Flow定义方式变更
Prefect 2.x要求flow必须是一个被@flow装饰的可调用函数,不再支持1.x的with Flow(...) as flow上下文写法。这是你触发错误的核心原因。调度配置方式变更
2.x中不再使用run_config来设置调度,而是通过Deployment对象来绑定flow和调度规则。Deployment.build_from_flow可以快速创建带调度的部署,调用apply()后会将部署注册到Prefect服务,自动按照间隔执行任务。模块导入保持正确
确保导入的是Prefect 2.x的flow、task和IntervalSchedule,避免混用1.x的模块。
运行说明
执行代码前,需要启动本地Prefect服务(执行命令prefect server start),部署生效后,任务会自动按照10秒间隔执行。
内容的提问来源于stack exchange,提问作者rotoh
相关产品推荐
相关产品推荐

