Django+Celery+Redis异步股票更新应用Celery启动报错求助
解决Celery默认连接AMQP而非Redis的问题
核心问题分析
你启动Celery时使用了错误的应用入口参数,导致Celery没有加载settings.py和celery.py中配置的Redis Broker,转而使用默认的AMQP(RabbitMQ)连接,从而触发连接拒绝错误。
分步解决方案
1. 修正Celery启动命令
你的celery.py中定义的Celery应用名为myproject,启动时需要指定这个应用作为入口,而非默认的celery。将启动命令改为:
celery -A myproject worker -l info
如果需要同时启动Beat调度器,使用:
celery -A myproject worker -B -l info
2. 确认celery.py的位置与初始化配置
确保celery.py文件放在项目的根包目录下(与settings.py同级),目录结构应类似:
myproject/ ├── myproject/ │ ├── __init__.py │ ├── celery.py │ └── settings/ │ └── _base.py └── manage.py
同时在myproject/__init__.py中添加以下代码,确保Django启动时能识别Celery应用:
from __future__ import absolute_import, unicode_literals from .celery import app as celery_app __all__ = ('celery_app',)
3. 验证Redis连接状态
执行以下命令确认Redis服务正常运行且可连通:
redis-cli ping
返回PONG则说明Redis正常;若无响应,检查Redis服务是否正确启动、端口是否为6379。
4. 确认配置加载逻辑
celery.py中的配置加载代码是正确的,它会自动读取settings.py中以CELERY_为前缀的配置项:
app.config_from_object('django.conf:settings', namespace='CELERY')
你的settings.py配置无需修改。
5. 检查环境变量设置
确保celery.py中设置的Django settings模块路径正确:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings._base')
如果你的settings文件路径不同,需对应修改该值。
测试启动
完成上述步骤后重新启动Celery,日志中应显示使用Redis作为transport:
[config] .> app: myproject:0x101ecc220 (.default.Loader) .> transport: redis://localhost:6379// .> results: redis://localhost:6379// ...
内容的提问来源于stack exchange,提问作者gabekutner
相关产品推荐
相关产品推荐

