Celery异步任务Demo运行失败求助:ImportError: cannot import name LRUCache
解决Celery启动时的ImportError: cannot import name LRUCache问题
你遇到的这个导入错误其实是Celery与kombu版本不兼容导致的,我来帮你拆解问题和解决办法:
问题根源
Celery 4.1.0的内部代码还在尝试从kombu.utils.functional路径导入LRUCache类,但你安装的kombu 4.1.0已经把这个类迁移到了kombu.utils.limits路径下,这种导入路径的不匹配直接引发了ImportError。
解决方案
方案1:匹配兼容的依赖版本(推荐)
Celery 4.1.0官方推荐搭配kombu 4.0.x系列版本,你可以通过降级kombu来彻底解决问题:
在虚拟环境中执行以下命令:
pip install kombu==4.0.2
完成后,重新启动Celery Worker:
celery -A tasks worker --loglevel=info
这个方法最稳妥,不会破坏现有代码结构,也能保证依赖之间的兼容性。
方案2:手动修改Celery的导入代码(不推荐)
如果你不想降级kombu,可以临时修改Celery的内部导入逻辑:
- 找到虚拟环境中Celery的安装目录,比如
venv/lib/python3.6/site-packages/celery/utils/collections.py - 打开文件,找到这一行:
from kombu.utils.functional import LRUCache
- 修改为:
from kombu.utils.limits import LRUCache
- 保存文件后重启Worker。
⚠️ 注意:这个方法只是临时修复,后续升级Celery时会被覆盖,只建议在特殊场景下使用。
额外检查点
- 确保你始终在虚拟环境中执行命令,避免全局Python环境的包干扰,可以用
pip list确认当前环境的依赖版本是否正确。 - 虽然当前错误和RabbitMQ无关,但后续运行异步任务前,记得确认RabbitMQ服务处于正常运行状态。
内容的提问来源于stack exchange,提问作者Raunak Agarwal
相关产品推荐
相关产品推荐

