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

Heroku Clock进程配置:如何让Python定时任务在14:30执行?

解决Heroku Clock进程定时任务14:30执行的问题

你当前的代码存在两个关键问题,导致修改后任务仍未在14:30执行:

1. Cron参数名错误

APScheduler的cron触发器中,分钟参数是单数的minute,而非你写的复数minutes。参数名写错后,调度器会忽略该配置,仍按默认的0分执行任务。

2. import执行脚本的逻辑问题

import AME_Heroku_v001.py的写法本身不规范(导入模块时不需要加.py后缀),且Python的import机制是:模块第一次导入时会执行顶层代码,但后续重复导入不会再执行。这意味着你的定时任务只有第一次触发时会运行脚本,后续调度都不会生效。

正确代码示例

方案一:用subprocess直接执行脚本(适合不修改原脚本的场景)

from apscheduler.schedulers.blocking import BlockingScheduler
import subprocess
import sys

sched = BlockingScheduler()

@sched.scheduled_job('cron', day_of_week='mon-fri', hour=14, minute=30)
def scheduled_job():
    # 每次触发都重新执行脚本,避免import的缓存问题
    subprocess.run([sys.executable, 'AME_Heroku_v001.py'])

sched.start()

方案二:重构脚本为函数调用(更推荐,代码更易维护)

先修改AME_Heroku_v001.py,把核心逻辑封装成函数:

# AME_Heroku_v001.py
def main():
    # 将原脚本的所有业务逻辑放到这个函数里
    print("执行定时任务核心逻辑")

if __name__ == "__main__":
    main()

再修改clock.py调用该函数:

from apscheduler.schedulers.blocking import BlockingScheduler
from AME_Heroku_v001 import main

sched = BlockingScheduler()

@sched.scheduled_job('cron', day_of_week='mon-fri', hour=14, minute=30)
def scheduled_job():
    main()

sched.start()

部署注意事项

修改代码后,需要推送到Heroku并重启Clock进程,确保新配置生效:

git add .
git commit -m "fix: adjust cron time to 14:30 and fix task execution logic"
git push heroku main
# 重启clock dyno
heroku ps:restart clock

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:40:38