启动Celery Worker时触发ModuleNotFoundError,错误涉及Broker的DNS前缀
启动Celery Worker时触发ModuleNotFoundError,错误涉及Broker的DNS前缀
看起来你遇到的问题是Celery把Broker的DNS地址前缀当成了要导入的Python模块名,这完全是因为你的Broker/Backend URL格式不正确导致的。
问题根源
Celery在解析Broker和Backend地址时,会把URL开头的协议标识(比如redis://)识别为要使用的传输模块。如果你的地址没加正确的协议前缀,Celery就会误把DNS的第一段(也就是你案例里的a-redis-server)当成模块名去查找,自然就抛出ModuleNotFoundError了。
解决步骤
你只需要给Redis地址加上正确的协议前缀就能解决:
- 普通Redis连接,在地址前加
redis://:# 配置示例 broker_url = "redis://a-redis-server.abcdef.0001.use1.cache.amazonaws.com:6379/0" result_backend = "redis://a-redis-server.abcdef.0001.use1.cache.amazonaws.com:6379/0" - 如果是SSL加密的Redis连接,用
rediss://作为前缀:broker_url = "rediss://a-redis-server.abcdef.0001.use1.cache.amazonaws.com:6379/0" result_backend = "rediss://a-redis-server.abcdef.0001.use1.cache.amazonaws.com:6379/0" - 要是Redis需要用户名密码认证,把认证信息嵌入URL即可:
broker_url = "redis://your_username:your_password@a-redis-server.abcdef.0001.use1.cache.amazonaws.com:6379/0"
修改完配置后重启Celery Worker,这个错误应该就会消失了。
备注:内容来源于stack exchange,提问作者p5k6
相关产品推荐
相关产品推荐

