Я уже довольно давно играю / работаю с 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 не предоставляет ничего из того, о чем я прошу. Цветок не будет показывать задачи в очереди, и он не позволит мне мгновенно приостановить конкретную очередь. В лучшем случае это позволит мне отменить потребителя, который, как я уже сказал, перестанет выполнять задачи после того, как предварительно загруженные задачи будут выполнены.