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

IPython中如何关闭运行中的asyncio事件循环而不导致内核崩溃?

问题原因

IPython 7.0及以上版本默认内置asyncio支持,启动时会自动拉起一个持久运行的事件循环作为内核依赖组件。你遇到的RuntimeError: This event loop is already running报错,本质是非异步版本get_json的内部实现调用了asyncio.run()或loop.run_until_complete()这类尝试启动新事件循环的逻辑,检测到已有循环处于运行状态才抛出异常。
你直接调用asyncio.get_event_loop().stop()会直接终止IPython内核依赖的运行时循环,所以必然触发内核崩溃。重启IPython也没用的原因是,IPython每次启动都会重新拉起这个默认循环,问题根源没有被解决。

解决方案

  • 方案1:给事件循环打嵌套运行补丁(最便捷)
    安装nest_asyncio,允许事件循环嵌套运行,不需要关闭IPython默认循环:
pip install nest_asyncio

在IPython中执行以下代码后即可正常运行非异步版本get_json:

import nest_asyncio
nest_asyncio.apply()
  • 方案2:换用普通Python交互环境
    如果你需要完全自主管理事件循环的生命周期,不要使用IPython交互环境,切换到原生Python交互式shell即可。该环境不会默认启动事件循环,你可以自行创建、运行、关闭循环,不会触发内核崩溃问题。
  • 方案3:统一使用异步API
    你已经处于IPython的异步运行环境中,直接await调用异步版本的get_json即可,不需要额外使用同步封装的版本,逻辑上更合理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:27:02