Продолжить запрос django rest framework

У меня есть запрос, который длится более 3 минут, я хочу, чтобы запрос был отправлен и сразу выдал ответ 200, а после окончания работы - выдал результат

Предположим, пришел запрос, вам нужно будет его проверить. Затем отправить ответ и использовать механизм для завершения запроса в фоновом режиме. Вы должны быть уверены, что запрос может быть выполнен. Вы можете использовать конвейеризацию, когда вы помещаете каждую задачу в конвейер, Django-Celery является одним из вариантов, но не используйте его, если это не требуется. Найдите простой способ решения проблемы

Описанный вами рабочий процесс называется асинхронным выполнением задач.

Основная идея заключается в том, чтобы удалить из кода, обрабатывающего HTTP-запросы, части работы, требующие времени или ресурсов, и передать их какому-либо работнику. Рабочим может быть отдельный поток или процесс или даже отдельная служба, работающая на другом сервере.

Это делает ваше приложение более отзывчивым, так как пользователи получают HTTP-ответ гораздо быстрее. Кроме того, при таком подходе вы можете отображать такие удобные для пользовательского интерфейса вещи, как индикаторы выполнения и отметки о состоянии задачи, создавать политики повторного выполнения в случае неудачи задачи и т.д.

Пример рабочего процесса:

  1. пользователь делает HTTP запрос, инициирующий задачу
  2. сервер создает задачу, добавляет ее в очередь и немедленно возвращает HTTP ответ с task_id
  3. front-end код запускает ajax polling для получения результатов прохождения задачи task_id
  4. сервер обрабатывает опрос HTTP запросов и получает информацию о состоянии для этого task_id. Он возвращает информацию (результаты или "все еще ждет") с HTTP-ответом
  5. .
  6. на внешнем интерфейсе отображается спиннер, если сервер возвращает "все еще ожидание" или результаты, если они готовы
  7. .

Самым популярным способом сделать это в Django является использование celery распределенной очереди задач.

Вернуться на верх