Django+Huey定时任务异常:每日10点任务不执行但每分钟任务正常
解决Huey每日10点定时任务不执行的问题
以下是针对该问题的排查和解决步骤:
1. 确认时区配置
Huey的crontab默认使用UTC时区,如果你的服务器或Django采用本地时区(如CET/CEST),设置hour='10'实际会在UTC时间10点执行,对应本地时间可能偏差1-2小时(取决于夏令时)。
解决办法:
- 给
crontab显式指定时区,或把小时转换为UTC时间。例如本地时区为UTC+1时,UTC时间9点对应本地10点:@periodic_task(crontab(hour='9', timezone='Europe/Paris')) # 替换为你的实际时区 def getjplus1(): # 任务代码 - 或者在Huey全局配置中设置时区:
HUEY = { # 其他原有配置 'consumer': { # 其他原有配置 'timezone': 'Europe/Paris', # 添加时区配置 }, }
2. 显式声明分钟参数
仅设置hour='10'时,Huey默认minute=0,但显式声明可避免潜在的解析异常:
@periodic_task(crontab(hour='10', minute='0')) def getjplus1(): # 任务代码
3. 重启Huey消费者进程
修改定时规则后必须重启Huey消费者,否则旧的任务配置会持续生效,新规则不会被加载。执行重启命令(根据你的启动方式调整):
# 先停止旧进程,再启动新进程 python manage.py run_huey
4. 检查Huey调度日志
开启详细日志,查看10点左右消费者的调度记录,确认任务是否被触发或存在执行错误:
- 修改settings.py中的HUEY配置,提高日志级别:
HUEY = { # 其他原有配置 'consumer': { 'loglevel': 'DEBUG', # 改为DEBUG级别 # 其他原有配置 }, } - 运行消费者时查看控制台输出,或配置日志文件,重点检查是否有任务调度相关日志,例如:
[DEBUG] huey: Scheduled task getjplus1 to run at 2024-05-20 10:00:00
额外提示:任务逻辑优化
你的代码存在逻辑问题:循环遍历filter_fields时,每次都会覆盖suivis_patient变量,最终仅保留最后一个key的过滤结果。如需合并所有key的查询结果,应修改为:
suivis_patient = SuiviPatient.objects.none() for key, value in filter_fields.items(): suivis_patient |= SuiviPatient.objects.filter( response_suivi_patient__suivi_field_name__icontains=key, response_suivi_patient__response__icontains=value, status='planifié', archived=False ) get_suivi_patient_j1(list(set(suivis_patient)))
内容的提问来源于stack exchange,提问作者MOURET Jonas
相关产品推荐
相关产品推荐

