芹菜检查不稳定的行为

时间:2014-07-10 14:42:10

标签: python celery

我使用RabbitMQ后端获得芹菜项目,该项目在很大程度上依赖于检查计划任务。我发现以下代码在大多数情况下都没有返回任何内容(当然,还有预定的任务):

i = app.control.inspect()
scheduled = i.scheduled()
if (scheduled):
     # do something

这段代码也是从一个任务开始运行的,但我认为没关系,我从交互式python命令行得到了相同的结果(有一些例外,见下文)。

同时,celery -A <proj> inspect scheduled命令永远不会失败。另外,我注意到,当第一次从交互式python命令行调用时,此命令也永远不会失败。大多数连续的i.scheduled()调用都没有返回任何内容。

i.scheduled()仅在第一次调用时保证结果?

如果是这样,为什么以及如何从任务中检查计划任务?运行专用工作器并在每个任务后重新启动它?对于这种琐碎的任务来说似乎有些过分。

请解释一下如何以正确的方式使用此功能。

1 个答案:

答案 0 :(得分:1)

这是由Celery应用程序中的一些奇怪问题引起的。要从Inspect对象重复方法,您必须创建新的Celery应用程序实例对象。

这是一个小小片段,可以帮助您:

from celery import Celery

def inspect(method):
    app = Celery('app', broker='amqp://')
    return getattr(app.control.inspect(), method)()

print inspect('scheduled')
print inspect('active')