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

WSL2中Redis与Django Channels连接异常:Event loop closed错误排查

问题解决步骤

1. 调整Redis绑定地址(解决跨WSL2/Windows的连接稳定性问题)

WSL2的网络隔离特性可能导致异步Redis客户端在连接关闭时触发异常,先修改Redis配置允许外部访问:

  • 在WSL2终端编辑Redis配置文件:sudo nano /etc/redis/redis.conf
  • 找到bind 127.0.0.1行,修改为bind 0.0.0.0(允许所有IP访问)
  • 重启Redis服务:sudo systemctl restart redis-server
  • 查看WSL2的IP地址:ip addr show eth0 | grep inet,记录输出中inet后的IP(例如192.168.1.100)
  • 更新Django的settings.py中CHANNEL_LAYERS配置,将127.0.0.1替换为WSL2的IP:
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [("192.168.1.100", 6379)],  # 替换为你的WSL2实际IP
        },
    },
}

2. 修复Django Shell中的事件循环问题

同步Shell环境下使用async_to_sync可能导致事件循环提前关闭,可手动管理事件循环:
打开Django Shell后执行以下代码:

import asyncio
import channels.layers
from asgiref.sync import async_to_sync

# 手动初始化事件循环
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

channel_layer = channels.layers.get_channel_layer()
async_to_sync(channel_layer.send)('test_channel', {'type': 'hello'})
result = async_to_sync(channel_layer.receive)('test_channel')
print(result)

3. 调整依赖版本(兼容性修复)

高版本redis-py与channels_redis、asgiref可能存在兼容性问题,指定稳定版本:

  • 卸载现有版本:pip uninstall -y redis channels_redis
  • 安装兼容版本:pip install redis==4.6.0 channels_redis==4.1.0

验证

重新进入Django Shell执行测试代码,确认不再抛出RuntimeError: Event loop is closed异常,且能正常接收消息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:31:18