Задачи управления и запросов в Celery

Я уже довольно давно играю / работаю с Celery, и в качестве инструмента «Пожалуйста, запустите эту задачу и повторите ее несколько раз, если она не удалась, отправьте мне электронное письмо, если она не удастся более 10 раз», это довольно круто. Это именно так.

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

Я знаю, что у Celery есть очереди и что я могу вызывать add_consumer и cancel_consumer, но я заметил, что даже если я отменю потребителя, рабочий все равно будет выполнять все задачи, которые мы уже предварительно загружаем. Это означает, что нет возможности выполнить команду Pause *NOW*. Есть просто Pause sometime later, when you're done doing stuff.

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

Но затем проявляется другая проблема: ¿Сколько задач у меня на самом деле? Celery представит примитивный способ запроса активных и запланированных задач, но я заметил, что задачи, которые находятся в состоянии RETRY, не находятся ни в активном, ни в запланированном списке, что означает, что запрос общего количества задач с помощью Celery является ошибкой склонный.

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

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

Нет ли чего-нибудь, что позволило бы мне лучше контролировать сельдерей? Что-то, что позволило бы мне приостановить / возобновить / остановить целые очереди задач и, возможно, показать мне некоторую статистику (how many tasks in total in this queue?, how many active in this queue?, how many in retry state in this queue? и т. Д.)

Просто к сведению: Да, я знаю, что такое Цветок. Нет, Flower не предоставляет ничего из того, о чем я прошу. Цветок не будет показывать задачи в очереди, и он не позволит мне мгновенно приостановить конкретную очередь. В лучшем случае это позволит мне отменить потребителя, который, как я уже сказал, перестанет выполнять задачи после того, как предварительно загруженные задачи будут выполнены.


person alexandernst    schedule 12.01.2019    source источник
comment
Я использую Celery с RabbitMQ. Чтобы запросить статистику, относящуюся к очереди, мне нужно выполнить вызовы API для кролика с помощью RabbitMQ Management HTTP API.   -  person Anil    schedule 12.01.2019
comment
@Anil делает ли RabbitMQ в сочетании с поддержкой Celery, останавливая все задачи из определенной очереди?   -  person alexandernst    schedule 12.01.2019


Ответы (1)


Насколько мне известно, Celery не дает вам возможности приостанавливать / возобновлять и останавливать задачи из коробки.

Я думаю, что лучше сначала проверить, нужно ли запускать задачу, до кода задачи. И сохраните эту информацию в Redis.

Возможности управления сельдереем

Вы можете посмотреть:

person Artem Rys    schedule 21.01.2019