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

更换主机后运行Discord机器人报RuntimeError: Event loop is closed错误如何解决

问题根因

报错出现在bot.run()执行时尝试为当前异步事件循环添加SIGINT信号处理逻辑,但此时事件循环已被提前关闭。该问题和Token配置、业务代码无关,是新主机的运行环境、依赖版本差异导致的。

排查步骤

  • 验证新旧主机的discord.py版本是否一致:执行pip show discord.py查看版本号,跨大版本升级/降级很容易触发该类异步逻辑异常
  • 确认脚本运行方式:如果使用nohup、systemd服务、docker容器等非交互式后台运行方式,这类环境会默认限制进程的信号处理权限,触发asyncio的事件循环检测异常
  • 对比新旧主机的Python小版本:Python3.9的不同子版本对asyncio事件循环的默认关闭逻辑有差异,可执行python3 --version确认版本是否匹配

修复方案

按优先级尝试以下方案:

方案1:禁用信号处理逻辑(适用90%以上场景)

修改bot.run调用参数,关闭内置的信号处理逻辑即可跳过报错代码:

# 将原有的bot.run(bot_token)替换为下面的代码
bot.run(bot_token, handle_signals=False)

后台运行场景下不需要处理终端传入的中断信号,该修改不会影响机器人的正常功能。

方案2:手动初始化事件循环

如果方案1无效,在代码最开头手动创建并指定新的事件循环:

import asyncio
asyncio.set_event_loop(asyncio.new_event_loop())

# 后续原有代码保持不变
import discord
from discord.ext import commands
import os
from dotenv import load_dotenv
...

方案3:对齐依赖版本

将新主机的discord.py版本调整为和旧主机完全一致,比如旧主机使用的是2.3.2版本,执行以下命令安装对应版本:

pip install discord.py==2.3.2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:54:03