如何使用 asyncio 从协程对象返回结果?

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

我正在尝试学习如何使用 asyncio 在谷歌合作实验室中运行异步代码。但是,我在返回结果时遇到问题。

我为自己设置的一个例子如下:

async def main():
  task = asyncio.create_task(other_function())
  print("1")
  await asyncio.sleep(1)
  print("2")
  await task

async def other_function():
  print('A')
  await asyncio.sleep(1)
  print('B')

asyncio.run(main())

这会导致错误“无法从正在运行的事件循环中调用 asyncio.run()”

我确定,由于 google co-labs 运行其事件循环的方式,不需要 asyncio.run() ,并尝试在删除这部分的情况下重新运行代码。

但是,通过将底行更改为 main() 而不是 asyncio.run(main()) ,输出为“”。这不是我要找的。

理论上输出应该是

1
A
2
B

到目前为止,我还没有找到解决方案。任何正确方向的帮助或指示将不胜感激。

python asynchronous python-asyncio coroutine
1个回答
0
投票

在 google-colab 中,只需将

await main()
放在末尾即可:

import asyncio

async def main():
  task = asyncio.create_task(other_function())
  print("1")
  await asyncio.sleep(1)
  print("2")
  await task

async def other_function():
  print('A')
  await asyncio.sleep(1)
  print('B')

await main()

输出:

1
A
2
B
© www.soinside.com 2019 - 2024. All rights reserved.