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

Почему нужна ссылка на задачу из create_task

Вопрос

Почему документация советует сохранять ссылку на результат asyncio.create_task(...)?

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

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

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

Коротко

Правильный ответ: Цикл держит задачи слабо, и GC может собрать задачу. Цикл событий держит задачи слабо, поэтому «запустил и забыл» может оборваться на середине.

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

  1. Без ссылки задача не запустится, цикл её не увидит
  2. Без ссылки задача выполнится синхронно при создании
  3. Цикл держит задачи слабо, и GC может собрать задачуправильный ответ
  4. Ссылка нужна только для получения результата через await

Разбор

Цикл событий держит задачи слабо, поэтому «запустил и забыл» может оборваться на середине. Хранят ссылки в множестве и убирают их в add_done_callback, либо используют TaskGroup. Задача запускается и без сохранения ссылки, асинхронно, а не синхронно, и ссылка нужна не только ради результата, но и чтобы увидеть ошибки.

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

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