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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:06:25