如何用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
相关产品推荐
相关产品推荐

