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

Flask+Celery报错kombu.exceptions.OperationalError:连接被拒绝求助

Flask集成Celery异步任务连接拒绝问题排查与解决

核心原因分析

报错kombu.exceptions.OperationalError: [Errno 111] Connection refused本质是Celery无法连接到配置的Redis Broker,常见原因包括Redis未运行、连接配置错误、Celery Worker未启动等。

分步排查与修复

1. 确认Redis服务状态

  • 执行命令redis-cli ping,若返回PONG则Redis正常运行;若报错,需启动Redis服务:
    • Ubuntu/Debian:sudo systemctl start redis-server
    • Windows:直接运行Redis安装目录下的redis-server.exe

2. 验证Redis连接配置

  • 检查celery_config.py中的broker_url和result_backend:
    • 确认端口6379是Redis实际监听端口(可通过redis-cli CONFIG GET port查看)
    • 若Redis设置了密码,需在URL中添加认证信息:redis://:your_password@localhost:6379/1
    • WSL环境注意:若Redis在Windows主机运行,需将localhost替换为Windows主机的IP地址(如192.168.x.x)

3. 正确启动Celery Worker

  • 在项目根目录执行启动命令,确保指向正确的Celery实例:
    celery -A app.celery_app worker --loglevel=info
    
    • app.celery_app对应app.py中初始化的Celery对象
    • 观察启动日志,确认是否输出Connected to redis://localhost:6379/1类的成功连接信息

4. 修复任务与Celery App的关联

  • 当前backend_jobs.py中的@shared_task可能未关联到正确的Celery App,导致任务使用默认配置无法连接Broker。修改方式:
    # backend_jobs.py
    from application.worker import celery_init_app
    from flask import current_app
    
    celery_app = celery_init_app(current_app)
    
    @celery_app.task(ignore_result=False)
    def say_hello():
        return "Hello world"
    
    或者在app.py中确保Celery App实例被导入到任务模块的上下文环境中。

5. 检查端口占用与防火墙

  • 确认6379端口未被其他程序占用:
    • Linux:netstat -tuln | grep 6379
    • Windows:netstat -ano | findstr :6379
  • 若有防火墙规则,确保允许本地或跨网络的Redis端口连接。

验证修复

启动Flask应用和Celery Worker后,访问/test_route,若返回包含task_id的JSON响应,且Celery Worker日志中显示任务被接收执行,则问题解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:04:56