【问题标题】:Python asyncio coroutinesPython 异步协程
【发布时间】:2018-03-16 15:27:46
【问题描述】:

我有一个问题,我希望异步函数运行 3 个协程,但它最终运行 2 个,有时只运行 1 个。代码如下所示:

async def myfunction():
  await coroutine1()
  await coroutine2()
  await coroutine3()

有没有什么办法可以保证这3个协程一个接一个地执行?

【问题讨论】:

  • 这正是你要做的。为什么它不总是运行所有三个?其中一个是否引发了异常?
  • 它们都没有引发异常,虽然有时最后一个协程不会执行,但我现在已经解决了这个问题,使用 tasks = asyncio.gather(c1(), c2(), c3( )) 然后 loop.ensure_future(*tasks)

标签: python python-asyncio


【解决方案1】:

找到解决办法,

tasks = asyncio.gather(coroutine1(), coroutine2(), coroutine3())
loop.ensure_future(*tasks)

【讨论】:

  • 这将同时运行它们,而不是一个接一个。
  • asyncio.gather() 并行运行任务,而不是按顺序运行。其次,它只返回一个任务,所以ensure_future中的*tasks是不正确的。 (它可能看起来有效,因为Future 定义了__iter__,但这不是使用它的预期方式。)最后,事件循环上没有方法ensure_future,你的意思是asyncio.ensure_future()?跨度>
猜你喜欢
  • 2021-09-09
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2018-01-07
  • 2015-12-02
  • 1970-01-01
相关资源
最近更新 更多