Как в Django правильно запустить асинхронную задачу?

Нужно различать await внутри async-view и надёжную фоновую задачу. Если работа должна пережить HTTP-запрос или рестарт, её передают worker через очередь, а не оставляют asyncio.create_task() в view.

Короткий ответ

Что ответить на собеседовании

Нужно различать 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 не обеспечивает долговечность выполнения.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее