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

运行django-rq worker持续触发rq.exceptions.DeserializationError报错

问题原因

运行django-rq worker时抛出该异常,核心原因是worker进程启动时没有完成Django应用模型的全量加载,反序列化队列中携带Django模型实例的任务数据时,模型注册表未就绪触发AppRegistryNotReady,最终被RQ包装为DeserializationError抛出。
绝大多数情况都是启动方式错误,跳过了Django初始化流程直接拉起了RQ原生worker。

修复步骤
  • 优先使用django-rq封装的官方管理命令启动worker,不要直接调用原生rq worker命令:
    先确认django_rq已经加入项目settings.py的INSTALLED_APPS列表,之后切换到manage.py所在的项目根目录,执行如下启动命令:
    python manage.py rqworker  # 不指定队列名则默认监听default队列,多队列可以空格分隔追加队列名
    
    该命令会自动完成Django全量应用、模型的加载流程,之后才会启动任务消费循环,从流程上避免模型未就绪就反序列化任务的问题。
  • 如果是自定义脚本启动worker,必须严格按顺序手动初始化Django环境:
    在脚本最顶部优先写入Django初始化逻辑,所有和RQ、项目模型、任务函数相关的导入,都要放在初始化完成之后,示例:
    # 脚本最开头先写初始化逻辑
    import os
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "替换为你的项目settings模块的导入路径")
    import django
    django.setup()  # 这行执行完成后,Django模型注册表才会就绪
    
    # 初始化完成后再导入其他依赖
    from rq import Worker, Connection
    # 后续自定义worker启动逻辑
    
    顺序错误(比如先导入RQ或模型再执行django.setup())依然会触发相同报错。
  • 配置修正后仍重复报错的,清空队列积压的脏任务:
    之前错误启动阶段可能在Redis队列中写入了序列化异常的坏数据,worker拉取到这类历史任务时依然会抛反序列化错误。可以执行python manage.py rqempty <队列名>清空指定队列的积压任务,也可以手动连接Redis删除对应队列的键,之后重启worker即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:24:30