芹菜获取已注册的任务列表

Ric*_*nop 18 python celery

有没有办法获得已注册任务的列表?

我试过了:

celery_app.tasks.keys()
Run Code Online (Sandbox Code Playgroud)

这只返回内置Celery任务,如celery.chord,celery.chain等.

Chi*_*and 39

from celery.task.control import  inspect
i = inspect()
i.registered_tasks()
Run Code Online (Sandbox Code Playgroud)

这将给出所有工人和相关注册任务的字典.

from itertools import chain
set(chain.from_iterable( i.registered_tasks().values() ))
Run Code Online (Sandbox Code Playgroud)

如果您有多个工作人员运行相同的任务,或者您只需要一组所有已注册的任务,那么它就可以完成工作.

替代方式:

从终端,您可以使用此命令获取已注册任务的转储

celery inspect registered
Run Code Online (Sandbox Code Playgroud)

  • 对于任何使用带有Django的Celery的人来说,`celery -A {celery_app_name} inspect registered`就可以了. (16认同)

Nav*_*han 14

使用较新版本的 celery(4.0 及更高版本),以下似乎是正确的方法:

 from celery import current_app

 current_app.loader.import_default_modules()

 tasks = list(sorted(name for name in current_app.tasks
                            if not name.startswith('celery.')))
 return tasks
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。这对我来说非常有效,而接受的答案则不然。 (3认同)
  • 我认为这会以字符串形式返回任务(名称)列表,但是否可以将它们作为对象返回以访问其参数? (2认同)

小智 8

在 shell 中,尝试:

from celery import current_app 
print(current_app.tasks.keys())
Run Code Online (Sandbox Code Playgroud)

current_app.tasks将所有任务作为字典提供。键是您正在运行的当前 celery 应用程序中所有已注册任务的名称。