Нужно различать await внутри async-view и надёжную фоновую задачу. Если работа должна пережить HTTP-запрос или рестарт, её передают worker через очередь, а не оставляют asyncio.create_task() в view.
Как в Django правильно запустить асинхронную задачу?
Нужно различать await внутри async-view и надёжную фоновую задачу. Если работа должна пережить HTTP-запрос или рестарт, её передают worker через очередь, а не оставляют asyncio.create_task() в view.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Нужно различать await внутри async-view и надёжную фоновую задачу. Если работа должна пережить HTTP-запрос или рестарт, её передают worker через очередь, а не оставляют asyncio.create_task() в view.
В запросе можно await-ить поддерживающий async клиент, не блокируя loop. Для долгой обработки обычно используют Celery или другой task backend с отдельным worker. Если задача зависит от только что созданной записи, публикацию привязывают к успешному commit; для гарантии между БД и брокером нужен outbox. Задача должна быть идемпотентной, с timeout, повторами и наблюдаемым статусом. Сам async-view не обеспечивает долговечность выполнения.