Asyncio собирать гарантированный график заказа - PullRequest
0 голосов
/ 13 февраля 2019

Гарантируется ли, что сопрограммы, являющиеся аргументами asyncio.gather, будут запланированы с сохранением порядка?Рассмотрим следующий пример:

import asyncio

async def coro(i):
    print('{i} finished'.format(i=i))

async def main():
    await asyncio.gather(
            coro(0),
            coro(1),
            coro(2),
            coro(3),
            coro(4),
    )

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

и результат:

0 finished
1 finished
2 finished
3 finished
4 finished

1 Ответ

0 голосов
/ 13 февраля 2019

Да, по крайней мере из исходного кода реализации cpython они будут запланированы в порядке.Список сопрограмм повторяется, и задача добавляется в цикл для каждой из них одна за другой.Хотя я не вижу, в каком сценарии гарантия планирования становится важной.Нет гарантии, что цикл выполнит их по порядку, и нет никакой гарантии, что они будут выполнены в этом порядке.Я думаю, что это будет зависеть от деталей реализации конкретного цикла и природы кода.Например, попробуйте добавить asyncio.sleep (1) в подпрограмму перед печатью.

...