RuntimeError: This event loop is already running”问题解决

简介

按设计异步does not allow 其事件循环将被嵌套。这就提出了一个实际问题: 在事件循环为 已经在运行无法运行任务并等待 为了结果。试图这样做会导致错误 “RuntimeError: This event loop is already running”。

这个问题会在不同的环境中出现,比如Web服务器, gui应用程序和jupyter笔记本。

此模块修补asyncio以允许嵌套使用asyncio.run和 loop.run_until_complete。

问题呈现

# 测试代码
import asyncio

async def main():
    print("开始")
    response = await asyncio.sleep(2)
    print("结束",response)
  
asyncio.run(main())

jupyter notebook运行结果
RuntimeError: This event loop is already running”问题解决_第1张图片
vscode运行结果
RuntimeError: This event loop is already running”问题解决_第2张图片
pycharm运行结果
RuntimeError: This event loop is already running”问题解决_第3张图片
spider运行结果
RuntimeError: This event loop is already running”问题解决_第4张图片
查阅资料后,发现所使用的 Python 编辑器为 Spyder,其连接着 IPython 内核,而 IPython 内核本身在事件循环上运行,而 asyncio 不允许嵌套其事件​​循环,因此会出现如上图的错误信息。

导入nest_asyncio结果

RuntimeError: This event loop is already running”问题解决_第5张图片
问题解决。

你可能感兴趣的:(异步)