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

Celery启动触发TypeError: unhashable type: 'dict'错误求助

Celery启动报错TypeError("unhashable type: 'dict'")解决办法

核心问题分析

报错栈最终指向strategy = strategies[type_],此处type_被解析为字典而非预期的任务类型字符串,导致无法作为字典键使用,触发"unhashable type: 'dict'"错误。该问题通常由队列遗留异常消息、依赖版本不兼容或序列化配置错误引发。

解决步骤

1. 清理RabbitMQ异常任务消息

旧队列中可能遗留了格式错误的任务消息(比如之前错误代码发送的异常消息),worker启动后会自动消费这些消息导致报错:

# 列出当前所有队列
rabbitmqctl list_queues
# 删除目标队列(默认Celery队列为celery,替换为你的队列名)
rabbitmqctl delete_queue celery

2. 固定Celery及依赖版本

版本不兼容是常见诱因,尝试安装经过验证的稳定版本组合:

pip install celery==5.2.7 kombu==5.2.0 amqp==5.1.1

3. 检查并修正Celery序列化配置

确保消息序列化配置正确,避免解析异常:

from celery import Celery

app = Celery('tasks', broker='amqp://guest@localhost//')
# 配置序列化方式为JSON,避免格式解析问题
app.conf.update(
    task_serializer='json',
    accept_content=['json'],
    result_serializer='json',
)

4. 重建干净的虚拟环境

若依赖存在隐性冲突,直接重建虚拟环境:

# 退出当前虚拟环境
deactivate
# 删除旧虚拟环境
rm -rf venv
# 创建新虚拟环境并激活
python3 -m venv venv
source venv/bin/activate
# 安装指定版本依赖
pip install celery==5.2.7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:35:14