Выбор ответа Senior asyncio обновлено

Отмена gather

Вопрос

Что произойдёт с дочерними задачами, если отменить внешнюю задачу, которая ждёт await asyncio.gather(a(), b())?

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

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

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

Коротко

Правильный ответ: Отмена распространится на все незавершённые задачи gather. Если отменить сам gather (или задачу, которая его ждёт), он отменяет все свои ещё работающие дочерние задачи.

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

  1. Дочерние задачи продолжат работу, отменится только ожидание
  2. Отмена распространится на все незавершённые задачи gatherправильный ответ
  3. Отмена будет проигнорирована до завершения всех задач
  4. gather вернёт частичные результаты уже готовых задач

Разбор

Если отменить сам gather (или задачу, которая его ждёт), он отменяет все свои ещё работающие дочерние задачи. Это отличается от ошибки в одной из задач: там соседи без TaskGroup продолжают работать. Частичных результатов при отмене нет, наружу летит CancelledError.

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

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