Существует одна проблема, с которой ранее ответы не затрагивались и могут отбрасывать людей, если они не знают об этом.
Среди этих решений уже писал, я хотел бы использовать Danielle's с одним небольшим изменением: Я бы импортировать задачу в свой файл и использовать его атрибут .name
, чтобы получить имя задачи перейти на .tasks_by_type()
.
app.control.revoke(
[uuid for uuid, _ in
celery.events.state.State().tasks_by_type(task.name)])
Однако это решение будет игнорировать те задачи, которые были запланированы для будущего исполнения. Как и некоторые люди, которые комментировали другие ответы, когда я проверил, что .tasks_by_type()
return, у меня был пустой список. И действительно, мои очереди были пусты. Но я знал, что в будущем запланированы задачи, и эти были моей главной целью. Я мог видеть их, выполнив celery -A [app] inspect scheduled
, но на них не повлиял приведенный выше код.
мне удалось отменить запланированные задачи, делая это:
app.control.revoke(
[scheduled["request"]["id"] for scheduled in
chain.from_iterable(app.control.inspect().scheduled()
.itervalues())])
app.control.inspect().scheduled()
возвращает словарь, ключи которого являются именами рабочих и значение списков информации планирования (следовательно, потребности в chain.from_iterable
которая импортируется от itertools
).Информация о задаче находится в поле "request"
информации о планировании, а "id"
содержит идентификатор задачи. Обратите внимание, что даже после аннулирования запланированная задача по-прежнему будет отображаться среди запланированных задач. Запланированные задачи, которые будут отменены, не будут удалены из списка запланированных задач до истечения срока их таймера или до тех пор, пока Celery не выполнит какую-либо операцию очистки. (Перезагрузка работников запускает такую очистку.)
Это звучало многообещающе, но я не смог получить никаких результатов. Я установил 'CELERY_SEND_TASK_SENT_EVENT' для' True' для моих работников, но вызывает 'celery.events.State(). Tasks_by_type (...)' возвращает пустой список. – Mzzzzzz
Uhm, попробуйте использовать * напрямую * 'celery.events.state.state', как' ceralmon'. [См. Источник] (https://github.com/celery/celerymon/blob/master/celerymon/handlers/api.py). – gioi
Из оболочки сельдерея 'celery.events.state.state' по-прежнему дает мне пустой список. Есть ли отсутствующий шаг для инициализации потребления из очереди событий? – Mzzzzzz