Prefect Python程序未按计划执行,启动时自动运行问题求助
Prefect CronSchedule未生效,脚本启动时自动执行Flow的问题解决
问题根源
- 脚本末尾直接调用
leonardo_dicapriflow("Leo")是启动时自动执行的直接原因:这行代码会在脚本运行时立即触发Flow,而非仅完成部署配置。 - CronSchedule未按预期执行还需排查部署后的调度环境问题。
解决方案
- 移除手动触发Flow的代码
删除脚本最后一行leonardo_dicapriflow("Leo"),让脚本仅负责创建并应用部署配置。修改后代码如下:
from prefect import flow, task, get_run_logger from prefect.deployments import Deployment from prefect.orion.schemas.schedules import ( CronSchedule, IntervalSchedule, RRuleSchedule, ) @task(retries=2, retry_delay_seconds=5) def say_hello(): print("hello") return True @flow(name="leonardo_dicapriflow") def leonardo_dicapriflow(name: str): say_hello() return deployment = Deployment.build_from_flow( flow=leonardo_dicapriflow, name="email-deployment", version=1, tags=["demo"], schedule=CronSchedule(cron=("55 11 3 10 *") ) ) deployment.apply()
验证Cron表达式有效性
你的表达式55 11 3 10 *对应每年10月3日11点55分执行,若为测试可改用高频表达式(如*/5 * * * *每5分钟执行一次)快速验证调度是否生效。启动对应标签的Prefect Agent
部署配置完成后,必须启动匹配标签的Agent才能监听并执行定时任务:
prefect agent start --tag demo
- 确认Prefect Orion服务运行状态
确保Orion服务正常启动,否则无法调度定时任务:
prefect orion start
内容的提问来源于stack exchange,提问作者William J Priest
相关产品推荐
相关产品推荐

