Выбор ответа Senior asyncio обновлено
Отмена gather
Вопрос
Что произойдёт с дочерними задачами, если отменить внешнюю задачу, которая ждёт await asyncio.gather(a(), b())?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Отмена распространится на все незавершённые задачи gather. Если отменить сам gather (или задачу, которая его ждёт), он отменяет все свои ещё работающие дочерние задачи.
Варианты ответа
- Дочерние задачи продолжат работу, отменится только ожидание
- Отмена распространится на все незавершённые задачи
gatherправильный ответ - Отмена будет проигнорирована до завершения всех задач
gatherвернёт частичные результаты уже готовых задач
Разбор
Если отменить сам gather (или задачу, которая его ждёт), он отменяет все свои ещё работающие дочерние задачи. Это отличается от ошибки в одной из задач: там соседи без TaskGroup продолжают работать. Частичных результатов при отмене нет, наружу летит CancelledError.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.