Как получить неудачные задачи в сельдерей?

Я использую сельдерей для обработки некоторых задач. Я вижу, сколько активных или запланированных и т. Д., Но я не могу найти способ увидеть неудавшиеся задачи. Цветок показывает мне статус, но только если он запускался, когда задача была запущена и не удалась. Есть ли какая-либо команда для выполнения всех неудачных задач (STATUS: FAILURE)?

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

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

Базовый HTTP-API от Flower включает в себя конечную точку /api/tasks – вы можете использовать /api/tasks?state=FAILURE чтобы показывать только неудавшиеся задачи, а затем анализировать JSON, чтобы извлечь то, что вам нужно. Содержимое похоже на то, что вы получаете в веб-API, и легко прототипировать с помощью curl и format / filter с помощью jq :

 curl -s 'http://localhost:5555/api/tasks?state=FAILURE&limit=5' | jq . | less 

Цветок необходимо установить и запустить, конечно.

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

task id имеет state и свойства status . Таким образом, вы можете получить статус задач по id.

 my_task_id = my_task.delay(foo) my_task_id.state my_task_id.status 

дает статус, является ли оно ОЖИДАНИЕМ, НАЧАЛО, СЛУЧАЙ, НЕИСПРАВНОСТЬ или УСПЕХ.

afaik, celery показывают только активные, запланированные, зарезервированные, отозванные, но id не показывает неудавшиеся задачи.

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

 for task_id in task_id_list: if task_id.state == 'FAILURE' print(task_id)