【问题标题】:How to get the failed tasks in Celery?如何在 Celery 中获取失败的任务?
【发布时间】:2014-12-24 22:57:12
【问题描述】:

我正在使用 celery 来处理一些任务。我可以看到有多少活动或计划等,但我无法找到任何方法来查看失败的任务。 Flower 确实向我显示了状态,但前提是它在任务启动和失败时正在运行。是否有任何命令可以获取所有失败的任务(STATUS: FAILURE)?

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

【问题讨论】:

  • 你不能在重试任务之前把它记录在某个地方吗?

标签: php python ubuntu celery flower


【解决方案1】:

Celery 无法轻松找到失败的任务,但 Flower(主要的 Celery 管理 Web 应用程序)确实简化了这一点。它即使在任务完成后也会记录任务 ID,并且有一个 API 可以让您只查找失败的任务。

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

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

Flower当然需要安装和运行。

由于您有数百万个已完成的任务,您可能需要在数据存储中捕获失败的任务信息以进行有效访问 - 也许 Flower 会有所帮助。或者您可以尝试在 Celery 中使用自定义故障处理程序,以捕获刚刚失败的任务信息 - 请参阅 this answer

【讨论】:

    【解决方案2】:

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

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

    给出 PENDING、STARTED、RETRY、FAILURE 或 SUCCESS 的状态。

    afaik,celery 只显示活动、计划、保留、撤销,但 id 不显示失败的任务。

    由于您拥有所有任务 ID,因此您可以遍历它们的状态。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-02
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      • 2021-04-01
      • 2015-11-19
      • 2011-03-19
      相关资源
      最近更新 更多