如何在Celery中完成失败的任务?

S. *_*oop 2 php python ubuntu celery flower

我正在使用芹菜来处理一些任务.我可以看到有多少是活动的或预定的等等,但是我无法找到任何方法来查看失败的任务.Flower确实向我显示状态,但仅在任务启动和失败时才运行.是否有任何命令可以完成所有失败的任务(STATUS:FAILURE)?

创建任务时,我确实有任务ID.但它们有数百万.所以即使有办法通过任务ID检查它,我也无法逐个检查.但如果有这样的命令,请告诉我.

Ric*_*Vel 5

Celery不容易找到失败的任务,但Flower(主要的Celery管理网络应用程序)确实简化了这一点.它会在任务ID完成后记录它们,并且有一个API,可以让您只找到失败的任务.

Flower的相当基本的HTTP API包括/api/tasks 端点 - 您可以使用它 /api/tasks?state=FAILURE来仅显示失败的任务,然后解析JSON以提取您需要的内容.内容类似于您在Web API中获得的内容,并且curl使用jq进行原型设计和格式化/过滤很容易:

curl -s 'http://localhost:5555/api/tasks?state=FAILURE&limit=5' | jq . | less
Run Code Online (Sandbox Code Playgroud)

花当然需要安装和运行.

由于您有数百万个已完成的任务,您可能需要在数据存储中捕获失败的任务信息以便有效访问 - 也许Flower会有所帮助.或者你可以在Celery中尝试自定义的失败处理程序,以捕获失败的任务信息 - 请参阅此答案.


Chi*_*and 4

task id具有statestatus属性。这样就可以通过id获取任务的状态。

my_task_id = my_task.delay(foo)
my_task_id.state
my_task_id.status
Run Code Online (Sandbox Code Playgroud)

给出状态是 PENDING、STARTED、RETRY、FAILURE 还是 SUCCESS。

据我所知,celery 仅显示活动的、计划的、保留的、撤销的任务,但 id 不显示失败的任务。

由于您拥有所有任务 ID,因此您可以循环查看它们的状态。

for task_id in task_id_list:
    if task_id.state == 'FAILURE'
        print(task_id)
Run Code Online (Sandbox Code Playgroud)