Как интегрировать сельдерей с Flask и представить цветок, который является инструментом мониторинга сельдерея

Как всем известно, Flask — это облегченная среда веб-приложений WSGI на Python. С другой стороны, Celery — это очередь асинхронных задач, основанная на распределенной передаче сообщений.

Есть много сцен, которые нам понадобятся для выполнения асинхронных задач в нашем приложении. Поэтому в этой статье мы рассмотрим некоторые распространенные сценарии работы сельдерея в Flask.

Схема

  • Установка: пип установить
  • Настройка конфигурации Celery в Flask
  • Подготовьте базовое приложение (time.sleep)
  • Отправить асинхронную электронную почту
  • Проверьте ход выполнения задачи в длинной задаче
  • Визуализируйте с панелью инструментов Flower

Установка

pip install flask
pip install celery
#redis install
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make

Настройка конфигурации Celery в Flask

После установки вам нужно запустить брокера и работника celery (если вы не имеете ни малейшего представления об этом, вам нужно потратить некоторое время, чтобы прочитать doc-файлы сельдерея). Вкратце, Celery — это асинхронный менеджер миссий, и он состоит из трех частей.

Прежде всего, клиент Celery, клиент запустится с вашим фляжным приложением, поэтому вы можете его игнорировать.

Во-вторых, вам нужен брокер очередей для кэширования этих работ; в большинстве сценариев в качестве брокера сельдерея обычно используются Redis или RabbitMQ.

Последняя часть — это воркеры, нам нужны воркеры для выполнения задач, которые остаются в брокере сельдерея.). После знакомства с сельдереем мы рассмотрим силу сельдерея.

Простое приложение (прежде чем запускать этот код, вам понадобятся pip install libs).

Конфигурация колбы-сельдерея:

Стартовый брокер: redis-server

Запуск воркера: (вам нужно изменить имя воркера при изменении имени файла):

celery -A celery_flask.celery worker --loglevel=INFO

Покажите время (Сверните свой API, и вы поймете силу сельдерея):

curl -H “Content-Type:apllication/json” -X POST -d ‘{"time": 5, "name": "Chester"}’ http://localhost:5000/sleep_time/

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

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

Отправить асинхронную электронную почту

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

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

Проверьте ход выполнения задачи в длинной задаче (связать и выполнить)

Иногда ваша задача Celery представляет собой большую задачу, которая включает в себя множество подэтапов. На этом этапе время задачи непредсказуемо, и мы можем обновить статус задачи в конце фазы, чтобы предоставить пользователю лучший опыт использования нашего приложения. Давайте посмотрим, как это работает.

Длинная задача сложнее, чем наш первый пример (отправка электронной почты). Есть три части, которые вам нужно знать. Во-первых, конечная точка API, клиентская сторона запросит /longtaskapi, и будет запущена асинхронная задача celery. Тем временем конечная точка немедленно ответит кодом состояния 202, а task_id поможет клиентской стороне проверить ход выполнения задачи.

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

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

Визуализируйте с панелью инструментов Flower

Большую часть времени Celery будет очень занят в нашей производственной среде, ему приходится решать множество асинхронных задач. Мониторинг здоровья сельдерея будет важной задачей. Если вы просто хотите узнать количество непереработанных задач в настоящее время в брокере, вы можете отслеживать количество очередей через LLEN celery (имя очереди по умолчанию) и передавать данные в Grafana для мониторинга. Если вы не смогли найти очередь, значит, в redis нет непереваренных задач (по умолчанию redis удалит пустой список).

Кроме того, вы можете использовать flower, предоставленный celery, чтобы понять, как выполняется задача celery, а затем получить доступ к порту 5555, чтобы увидеть базовую панель мониторинга.

flower -A celery_flask.celery --broker=redis://localhost:6379/0

Есть три панели, предоставленные цветком. Мы могли бы реализовать статус рабочего и статистические результаты статуса выполнения задачи в первой панели. Например, в моем celery worker выполняется 25 задач, а 2 задачи не выполнены.

Вторая панель предоставляет нам детали задач. Через эту панель мы можем получить информацию о типе задачи, идентификаторе задачи, статусе задачи, результате задачи и времени выполнения задачи. Кроме того, мы могли бы использовать фильтр состояния, чтобы получить неудачный случай и исправить проблемные случаи. (Этот инструмент действительно может спасти мой день.)

Через последнюю панель мы могли реализовать непереваренные задачи в очереди и другую информацию о брокере.

Нет никаких сомнений в том, что этот инструмент мониторинга дает нам больший контроль над асинхронными задачами Celery и упрощает отладку.

Вывод

Если вы видели вышеизложенное, вы уже знаете, как создавать простые и сложные задачи с помощью Celery. В то же время мы также понимаем, что Celery — это мощный инструмент, который помогает нам выполнять асинхронные задачи и настраивать ход выполнения задач для обратной связи с интерфейсными приложениями. Серия асинхронной обработки сделает работу пользователя более плавной.

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

Ссылка









Дополнительные материалы на plainenglish.io