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