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

Django集成Celery后无法触发before_task_publish信号如何解决?

Celery Django集成before_task_publish信号不触发排查方案
  • 检查信号绑定代码的加载时机
    Celery 信号必须在 Celery 实例初始化完成、任务发布前完成绑定才会生效。如果你的绑定代码存放在 Django 运行时不会自动导入的模块中,绑定逻辑根本不会执行。建议把信号绑定代码放到两个位置:
    1. Celery 实例定义文件(通常是 <项目名>/<项目名>/celery.py)的末尾,跟随 Celery 实例初始化一起加载
    2. 对应 Django App 的 apps.py 的 ready() 方法中,保证 Django 启动时主动执行绑定逻辑
  • 核对信号导入路径
    确认你导入的 before_task_publish 来自 celery.signals,而非其他同名对象。
  • 排除日志配置干扰
    你当前使用 logger.error 输出日志,先确认该 logger 没有被配置为过滤 error 级别日志,也没有被定向到文件而非控制台。可以临时替换为 print 输出测试,先排除日志配置的问题。
  • 确认信号触发的对应进程
    before_task_publish 是任务发布端触发的信号,也就是你执行 debug_task.delay() 的进程(比如 Django shell 进程)才会触发,Celery Worker 进程不会触发这个信号。不要在 Worker 运行窗口查找输出,也不要给 Worker 进程加断点调试,直接在执行 delay() 的 shell 进程环境下测试即可。
  • 检查信号开关配置
    Celery 默认开启信号支持,如果你手动修改过 task_send_sent_event 等和信号、事件相关的配置,改回默认值 True 即可。

快速验证加载状态:在信号绑定代码的同级位置加一行 print("信号绑定逻辑已加载"),启动 Django shell 时如果能看到这行输出,说明绑定代码已经被正确执行,再测试任务发布即可。

内容的提问来源于stack exchange,提问作者Tjorriemorrie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:06:01