Celery周期性定时任务配置问题:调整执行时段与间隔
调整Celery周期性任务配置以匹配你的时间需求
要实现周一至周五08:01开始、16:30结束,每隔17分钟执行一次的任务,我们需要微调crontab的时间规则——原配置的*/17是从每个小时的0分启动,不符合你从08:01开始的要求。
具体配置修改方案
这里我们用两个crontab规则组合,覆盖不同时间段的执行需求:
from celery.schedules import crontab CELERYBEAT_SCHEDULE = { 'test-celery': { 'task': 'flask_react_app.task.ingest_stock_data', # 组合两个crontab规则,覆盖完整的时间范围 'schedule': crontab(minute='1-59/17', hour='8-15', day_of_week='mon-fri') | crontab(minute='13,30', hour='16', day_of_week='mon-fri'), } }
配置细节解释
第一部分规则:
crontab(minute='1-59/17', hour='8-15', day_of_week='mon-fri')minute='1-59/17':表示从1分钟开始,每隔17分钟执行一次,完美匹配你要的08:01、08:18、08:35...的时间序列。hour='8-15':覆盖08点到15点的所有小时,这个时间段内的最后一次执行是15:56,不会超过16:30的结束时间。
第二部分规则:
crontab(minute='13,30', hour='16', day_of_week='mon-fri')- 单独处理16点的执行:根据间隔计算,16点符合要求的执行时间是16:13和16:30(刚好是你的结束时间),这两个时间点无法被第一部分规则覆盖,所以单独列出。
验证执行时间
如果你想确认生成的任务时间是否符合预期,可以运行以下命令导出beat的任务计划:
celery beat --schedule /tmp/celerybeat-schedule --dump
查看输出的时间列表,就能确认所有执行点都在你要求的范围内。
内容的提问来源于stack exchange,提问作者user5948213




