有没有办法获得已注册任务的列表?
我试过了:
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)
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)
小智 8
在 shell 中,尝试:
from celery import current_app
print(current_app.tasks.keys())
Run Code Online (Sandbox Code Playgroud)
current_app.tasks将所有任务作为字典提供。键是您正在运行的当前 celery 应用程序中所有已注册任务的名称。