运行时错误:无法从正在运行的事件循环调用 asyncio.run()

问题描述 投票:0回答:2

我正在 asyncio 上运行最简单的示例:

import asyncio

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

asyncio.run(main())

我收到运行时错误: RuntimeError:无法从正在运行的事件循环调用 asyncio.run()

我在 M1 Mac 上使用 Spyder (Python 3.9)(...如果这很重要的话)。

预期结果是:

A

B

进程已完成,退出代码为 0

runtime-error python-asyncio
2个回答
1
投票

但是对于“.sleep.sleep”,此代码很好 - “事件循环已在运行”对于具有此代码的独立脚本来说当然不是问题。

也许您正在将其作为笔记本单元运行,并且已经设置了一些异步状态?

在 bash 终端中,我按原样粘贴了您的代码,只是替换了不正确的函数名称:

[gwidion@fedora tmp01]$ cat >bla42.py
import asyncio

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

asyncio.run(main())

[gwidion@fedora tmp01]$ python bla42.py
A
Traceback (most recent call last):
[...]
  File "/home/gwidion/tmp01/bla42.py", line 5, in main
    await asyncio.sleep.sleep(1)
AttributeError: 'function' object has no attribute 'sleep'
[gwidion@fedora tmp01]$ python -c 'open("bla43.py", "w").write(open("bla42.py").read().replace(".sleep.sleep", ".sleep"))'
[gwidion@fedora tmp01]$ python bla43.py
A
B
[gwidion@fedora tmp01]$ 


0
投票

您是否从 iPython、Spyder、Jupyter 或类似工具运行脚本?

如果是这样,则会发生错误,因为这些环境已经在运行事件循环。因此,当您从这些环境运行脚本时,您的 python 程序实际上是在一个更大的程序的上下文中运行,该程序已经有一个事件循环。

以下是同一问题的链接: Spyder 中的“运行时错误:无法从正在运行的事件循环中调用 asyncio.run()”

有多种解决方法。最简单的是:直接从终端/命令行运行脚本:

$ python script.py
© www.soinside.com 2019 - 2024. All rights reserved.