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

在Spyder中运行asyncio示例报错:asyncio.run()无法从运行的事件循环调用

解决asyncio.run()报错及代码错误问题

首先修正代码里的低级错误:你写的await asyncio.sleep.sleep(1)是错误调用,正确的应该是await asyncio.sleep(1)——asyncio.sleep本身就是一个协程函数,不需要再调用它的sleep属性。

接下来解决RuntimeError: asyncio.run() cannot be called from a running event loop的问题:
Spyder的IPython控制台默认会自动启动一个asyncio事件循环,而asyncio.run()的设计是用来创建并管理一个全新的事件循环,当检测到当前已有运行中的循环时就会抛出这个错误。

给你两种解决方案:

方案1:适配已有事件循环修改代码

直接利用Spyder已经启动的循环来运行你的协程,修改代码如下:

import asyncio

async def main():
    print("A")
    await asyncio.sleep(1)
    print("B")

# 处理已有循环的情况
try:
    loop = asyncio.get_running_loop()
    # 提交任务到已有循环
    task = loop.create_task(main())
    # 如果需要等待任务完成(脚本运行场景),可以添加await
    # await task
except RuntimeError:
    # 没有运行中循环时,用asyncio.run()
    asyncio.run(main())

如果是在Spyder的IPython控制台里直接运行,甚至可以简化成直接执行await main(),不需要调用asyncio.run()。

方案2:修改Spyder设置禁用默认事件循环

  1. 打开Spyder的Preferences(偏好设置)
  2. 进入IPython console -> Advanced settings
  3. 取消勾选Enable GUI event loop integration选项
  4. 重启Spyder后,你的原代码(修正sleep调用后)就可以正常用asyncio.run()执行了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:41:23