使用 loop.create_task 创建的 asyncio Event Loop 任务是否为 FIFO
Are asyncio's EventLoop tasks created with loop.create_task a FIFO
我找不到任何关于此的文档,但根据经验,似乎确实如此。
下面三个例子中协程1和2运行的顺序是什么,这个顺序总是有保证的吗?
一个
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
将 运行 直到它被告知等待。届时,控制权将交给 coro2
。 coro2
将 运行 直到它被告知等待。那时循环将检查 coro1
是否准备好恢复。这将重复,直到两者都完成,然后循环将等待。
在您的最后一个示例中,coro2
首先开始,按照与上一个示例相同的来回操作,然后该过程将在 coro2
完成后停止。然后 coro1
将恢复直到完成,然后循环将等待。
第四个例子是
loop.run_until_complete(
asyncio.gather(
asyncio.ensure_future(coro1),
asyncio.ensure_future(coro2),
)
)
它的行为与第二个示例类似,只是它会在两个都完成后停止。
我找不到任何关于此的文档,但根据经验,似乎确实如此。
下面三个例子中协程1和2运行的顺序是什么,这个顺序总是有保证的吗?
一个
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
将 运行 直到它被告知等待。届时,控制权将交给 coro2
。 coro2
将 运行 直到它被告知等待。那时循环将检查 coro1
是否准备好恢复。这将重复,直到两者都完成,然后循环将等待。
在您的最后一个示例中,coro2
首先开始,按照与上一个示例相同的来回操作,然后该过程将在 coro2
完成后停止。然后 coro1
将恢复直到完成,然后循环将等待。
第四个例子是
loop.run_until_complete(
asyncio.gather(
asyncio.ensure_future(coro1),
asyncio.ensure_future(coro2),
)
)
它的行为与第二个示例类似,只是它会在两个都完成后停止。