我找不到关于此的任何文档,但从经验上看似乎如此。
在以下三个示例中,协程1和2将以什么顺序运行,并且始终保证顺序吗?
一种
loop.run_until_complete(coro1)
loop.run_until_complete(coro2)
loop.run_forever()
乙
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和FIFO创建的asyncio的EventLoop任务吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40099885/