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

如何用APScheduler实现每天IST11:15-14:15每15分钟执行任务?

解决方案

问题根源

你的代码存在两个核心问题:

  • cron表达式完全不符合需求:当前minute='1', hour='12-14'只会在12-14点的第1分钟执行任务,和「11:15-14:15每15分钟一次」的要求完全不匹配
  • 未指定时区:APScheduler默认使用系统时区,若你的系统时区不是IST(印度标准时间,UTC+5:30),任务执行时间会出现偏差

修正后的精准版代码

from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime

def my_job():
    print(f"custom job called at {datetime.now()}")

# 初始化调度器,明确指定IST时区
scheduler = BlockingScheduler(timezone='Asia/Kolkata')

# 分三段配置任务,严格覆盖11:15到14:15的每15分钟:
# 1. 11点:仅在15、30、45分执行(从11:15开始,跳过11:00)
scheduler.add_job(my_job, 'cron', minute='15,30,45', hour='11')
# 2. 12-13点:每15分钟执行一次(0、15、30、45分)
scheduler.add_job(my_job, 'cron', minute='0,15,30,45', hour='12-13')
# 3. 14点:仅在15分执行(最后一次任务固定在14:15)
scheduler.add_job(my_job, 'cron', minute='15', hour='14')

scheduler.start()

更简洁的替代写法

也可以用单个cron表达式搭配时间范围限制实现,效果一致:

from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime

def my_job():
    print(f"custom job called at {datetime.now()}")

# 初始化调度器并指定IST时区
scheduler = BlockingScheduler(timezone='Asia/Kolkata')

# 每15分钟执行一次,同时限定在每日11:15到14:15之间
scheduler.add_job(
    my_job,
    'cron',
    minute='*/15',
    hour='11-14',
    start_date='11:15:00',
    end_date='14:15:00'
)

scheduler.start()

关键注意事项

  • 必须设置timezone='Asia/Kolkata':这是确保任务按IST时间执行的核心,绝对不能省略
  • 两种写法差异:精准版完全匹配要求的时间点;简洁版会多执行一次14:00的任务,但14:15仍是最后一次,也符合需求
  • 依赖补全:如果运行时报时区相关错误,执行pip install pytz即可补全依赖

内容的提问来源于stack exchange,提问作者SANJAY. R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:40:45