我找不到任何关于此的文档,但根据经验,似乎是。
协程1和2以什么顺序运行以下三个示例,并且始终保证订单?
A
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()
等
答案 0 :(得分:1)
在您的第一个示例中,coro1
将一直运行直到完成。然后coro2
将运行。这基本上和它们都是同步函数一样。
在你的第二个例子中,coro1
将一直运行,直到它被告知等待。此时,控制权交给coro2
。 coro2
将一直运行,直到它被告知等待。此时循环将检查coro1
是否准备好恢复。这将重复,直到两个完成,然后循环将等待。
在最后一个示例中,coro2
首先开始,与前一个示例一样来回,然后一旦coro2
完成,该过程就会停止。然后coro1
将恢复直到它完成,然后循环才会等待。
第四个例子是
loop.run_until_complete(
asyncio.gather(
asyncio.ensure_future(coro1),
asyncio.ensure_future(coro2),
)
)
它的行为与第二个示例类似,但一旦完成,它将停止。