Выбор ответа Junior asyncio спрашивают часто обновлено

Последовательные await против gather

Вопрос

Каждый вызов fetch ждёт 1 секунду через asyncio.sleep(1). Сколько займёт код?

async def main():
    a = await fetch(1)
    b = await fetch(2)
    c = await fetch(3)

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Около 3 секунд. Каждый await дожидается завершения корутины, прежде чем перейти к следующей строке, поэтому вызовы идут последовательно: 3 секунды.

Варианты ответа

  1. Около 1 секунды
  2. Около 0 секунд
  3. Около 1,5 секунды
  4. Около 3 секундправильный ответ

Разбор

Каждый await дожидается завершения корутины, прежде чем перейти к следующей строке, поэтому вызовы идут последовательно: 3 секунды. Чтобы ждать одновременно, нужно await asyncio.gather(fetch(1), fetch(2), fetch(3)) или TaskGroup, тогда будет около секунды.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.