Celery является незаменимым инструментом для веб-приложений, в которых требуется обрабатывать большое количество продолжительных задач. В данном материале мы рассмотрим, как Celery используется вместе с Flask.
Предположим, что есть веб-приложение, которое позволяет пользователям загружать изображения для обработки. Мы хотим предоставить им опции одновременной загрузки и обработки нескольких изображений с возможностью отслеживания статуса обработки каждого изображения.
Запустите Redis (в качестве брокера Celery):
Запустите воркеры Celery для обработки задач:
Запустите Flask-приложение:
Теперь вы можете отправлять POST-запросы на /process_images
в вашем Flask-приложении, передавая список images в JSON-формате. Приложение создаст группу задач для обработки каждого изображения в списке и вернёт group_id
, который позволит отслеживать статус обработки группы задач. Вы также можете получить текущий статус группы задач, отправив GET-запрос на /status/<group_id>
.
Если какое-либо изображение не успело обработаться, вы увидите другое значение, например 0.66667.
Многие сайты используют именно такую модель взаимодействия — раз в секунду они делают запрос к серверу, как будто спрашивают: «Ну как там?» — получают ответ и отображают его пользователю.
Этот пример демонстрирует, как использование группировки задач и отслеживание их статуса с помощью Celery позволяют параллельно обрабатывать множество задач и контролировать их выполнение, улучшая производительность и управляемость веб-приложения.
Практика
Доработайте приложение, добавив следующие endpoints:
/cancel/<group_id>
Отменяет группу задач. В этом вам поможет метод revoke./control
Отображает информацию о задачах и очередях с помощью методов celery.app.control. Сделайте так, чтобы информация актуализировалась раз в 10 секунд, а не при каждом запросе.
📂 Task Queue | Последнее изменение: 17.03.2024 11:59