Выбор ответа Senior asyncio обновлено
Почему нужна ссылка на задачу из create_task
Вопрос
Почему документация советует сохранять ссылку на результат asyncio.create_task(...)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Цикл держит задачи слабо, и GC может собрать задачу. Цикл событий держит задачи слабо, поэтому «запустил и забыл» может оборваться на середине.
Варианты ответа
- Без ссылки задача не запустится, цикл её не увидит
- Без ссылки задача выполнится синхронно при создании
- Цикл держит задачи слабо, и GC может собрать задачуправильный ответ
- Ссылка нужна только для получения результата через await
Разбор
Цикл событий держит задачи слабо, поэтому «запустил и забыл» может оборваться на середине. Хранят ссылки в множестве и убирают их в add_done_callback, либо используют TaskGroup. Задача запускается и без сохранения ссылки, асинхронно, а не синхронно, и ссылка нужна не только ради результата, но и чтобы увидеть ошибки.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.