我找不到任何相关文档,但从经验来看,似乎确实如此。
在以下三个示例中,协程 1 和 2 将以什么顺序运行?顺序是否始终得到保证?
A
loop.run_until_complete(coro1)
loop.run_until_complete(coro2)
loop.run_forever()
B
loop.create_task(coro1)
loop.create_task(coro2)
loop.run_forever()
C
loop.create_task(coro1)
loop.run_until_complete(coro2)
loop.run_forever()
等等
最佳答案
在第一个示例中,coro1
将运行直到完成。然后 coro2 将运行。这本质上与它们都是同步函数相同。
在第二个示例中,coro1
将一直运行,直到被告知等待。此时控制权将交给coro2
。 coro2
将一直运行,直到被告知等待。此时循环将检查coro1
是否已准备好恢复。这将重复,直到两者都完成,然后循环将等待。
在最后一个示例中,coro2
首先启动,遵循与前一个示例相同的来回操作,然后一旦 coro2
完成,该过程就会停止。然后 coro1 将恢复直到完成,然后循环将等待。
第四个例子是
loop.run_until_complete(
asyncio.gather(
asyncio.ensure_future(coro1),
asyncio.ensure_future(coro2),
)
)
它的行为与第二个示例类似,只是在两个示例完成后它将停止。
关于python - 使用loop.create_task创建的asyncio事件循环任务是否为FIFO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40099885/