芹菜:列出所有任务,计划的,活动的*和*完成

Posted

技术标签:

【中文标题】芹菜:列出所有任务,计划的,活动的*和*完成【英文标题】:Celery: list all tasks, scheduled, active *and* finished 【发布时间】:2012-08-31 06:58:35 【问题描述】:

赏金更新

如果可能的话,我想要一个不涉及监控线程的解决方案。


我知道我可以使用我的应用程序ControlInspect 类查看计划的活动的 任务。

i = myapp.control.inspect()

currently_running = i.active()
scheduled = i.scheduled()

但我找不到任何功能来显示已完成的任务。我知道这些信息必须至少可以暂时访问,因为我可以通过task_id 查找已完成的任务:

>>> r = my task.AsyncResult(task_id=' ... ')
>>> r.state
u'SUCCESS'

如何获得完整计划、活动和已完成任务的列表?或者可能同时列出所有个任务?

【问题讨论】:

我同意该信息是可检索的。我使用花,花应用程序可以检索所有任务的状态。我发现后端有一个缓存字典,但只存储了几个任务myapp.backend._cache。 Flower有一个restful api,我认为您可以在您的Web监控应用程序中使用它,但它必须是另一种方式...... 【参考方案1】:

Celery Flower 实时显示任务(活动、finished、保留等)。它可以按时间、工人和类型过滤任务。

https://github.com/mher/flower

【讨论】:

我需要在网站中集成监控解决方案,所以很遗憾我不能使用像花这样的开箱即用解决方案。但无论如何我都会调查它,因为它支持我的假设,即信息确实是可检索的。所以谢谢你的提示。 +1 看看它在flower中是如何实现的或者使用flower api 我正在尝试解决任务信息存储位置的难题...我可以在 Flower 中浏览 2000 个已完成的任务,但是配置为代理和结果后端的 redis 数据库都是空的(没有键).. . 我想我应该在那里看到一些东西? Flower 将它们存储在内存中 - 如果您重新启动它,所有(至少所有已完成的)任务都会消失。【参考方案2】:

不需要监控线程的一个选项是 Celery on_success 处理程序(使用引导步骤功能 in 3.1+) - 这需要将相关信息写入您自己的数据存储区。

您需要创建一个custom task class 来执行此操作。这个on_failure example 给出了一个想法。

可能更好的选择,需要更少的代码,以类似的方式使用task_success signal,记录您以后需要的信息。

Flower 选项可能更简单,因为您在任务完成时查询 Flower 已经维护的信息 - 请参阅 this answer。

【讨论】:

以上是关于芹菜:列出所有任务,计划的,活动的*和*完成的主要内容,如果未能解决你的问题,请参考以下文章

如何在任务中获取芹菜结果模型(使用 django-celery-results)

为啥创建了芹菜任务但未收到

用芹菜对特定任务设置时间限制

task_revoked 处理程序中的芹菜任务 ID

用supervisord运行芹菜无法发现任务

本周课题任务书