python - 使用loop.create_task创建的asyncio事件循环任务是否为FIFO

标签 python python-asyncio

我找不到任何相关文档,但从经验来看,似乎确实如此。

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

相关文章:

python - 以高效的方式从 Python 运行 ANSYS Mechanical APDL

python - 怎么强制去上课?

python - 从python函数插入mysql表

python-asyncio - 在 asyncio 中混合异步上下文管理器和直接等待

python - 将 threading.Timer 与 asyncio 一起使用

python - 等待任何 future 的异步

python - pylint 无法识别某些标准库

python - 在html页面中使用re模块搜索字符串

python - 异步收集调度订单保证

python - 检查 asyncio.get_event_loop() 是否已完成?