我找不到关于此的任何文档,但从经验上看似乎如此。

在以下三个示例中,协程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将一直运行直到被告知等待。此时,控制权交给coro2coro2将一直运行直到被告知等待。那时,循环将检查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/

10-12 22:25