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

Windows 10下Celery搭配eventlet无法连接Redis的Bug求助

Celery+Eventlet在Windows下无法连接Redis的问题分析与修复

问题原因

  • Windows系统中,Eventlet 0.36.x与Celery 5.3.x存在兼容性冲突:Eventlet的猴子补丁(monkey-patch)机制会干扰Redis客户端的Socket连接逻辑,导致Worker无法正常建立Redis连接,这正是GitHub Issues#4081的核心问题。
  • 另外Windows的网络模型和Unix系统差异较大,Eventlet的协程调度在Windows环境下对Socket的处理存在适配缺陷,进一步加重了连接失败的情况。

修复方法

方案1:降级Eventlet到兼容版本

  • 卸载当前的eventlet 0.36.1,安装经过验证的兼容版本(比如0.33.3):
    pip uninstall eventlet -y
    pip install eventlet==0.33.3
    
  • 重新启动Worker:celery -A [task] worker -l info -P eventlet

方案2:替换协程池为gevent

  • 如果不想降级Eventlet,可以改用gevent作为Celery的协程池:
    1. 安装gevent依赖:
      pip install gevent
      
    2. 启动Worker时指定gevent池:
      celery -A [task] worker -l info -P gevent
      

方案3:限制Eventlet的猴子补丁范围(临时应急,不推荐)

  • 在Celery任务文件的开头添加代码,仅对必要模块打补丁,避免干扰Redis连接:
    import eventlet
    # 仅补丁线程和时间模块,跳过Socket相关补丁
    eventlet.monkey_patch(thread=True, time=True, socket=False)
    
  • 再执行原启动命令,这种方式可能会限制协程的部分功能,仅适合临时解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:22:07