是否使用loop.create_task创建了asyncio的EventLoop任务FIFO

时间:2016-10-18 05:00:49

标签: python python-asyncio

我找不到任何关于此的文档,但根据经验,似乎是

协程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()

1 个答案:

答案 0 :(得分:1)

在您的第一个示例中,coro1将一直运行直到完成。然后coro2将运行。这基本上和它们都是同步函数一样。

在你的第二个例子中,coro1将一直运行,直到它被告知等待。此时,控制权交给coro2coro2将一直运行,直到它被告知等待。此时循环将检查coro1是否准备好恢复。这将重复,直到两个完成,然后循环将等待。

在最后一个示例中,coro2首先开始,与前一个示例一样来回,然后一旦coro2完成,该过程就会停止。然后coro1将恢复直到它完成,然后循环才会等待。

第四个例子是

loop.run_until_complete(
    asyncio.gather(
        asyncio.ensure_future(coro1),
        asyncio.ensure_future(coro2),
    )
)

它的行为与第二个示例类似,但一旦完成,它将停止。