我使用RabbitMQ后端获得芹菜项目,该项目在很大程度上依赖于检查计划任务。我发现以下代码在大多数情况下都没有返回任何内容(当然,还有预定的任务):
i = app.control.inspect()
scheduled = i.scheduled()
if (scheduled):
# do something
这段代码也是从一个任务开始运行的,但我认为没关系,我从交互式python命令行得到了相同的结果(有一些例外,见下文)。
同时,celery -A <proj> inspect scheduled
命令永远不会失败。另外,我注意到,当第一次从交互式python命令行调用时,此命令也永远不会失败。大多数连续的i.scheduled()
调用都没有返回任何内容。
i.scheduled()
仅在第一次调用时保证结果?
如果是这样,为什么以及如何从任务中检查计划任务?运行专用工作器并在每个任务后重新启动它?对于这种琐碎的任务来说似乎有些过分。
请解释一下如何以正确的方式使用此功能。
答案 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')