假设我们有一个呼叫者A
和一个被呼叫者B
。 B
实现了某些功能,并且具有很高的依赖性。
通常,我不想在A
中导入这些依赖项以保持其轻量级。
以前,我可以很高兴地使用send_task
来按名称呼叫B
。
现在,我有更复杂的逻辑,想用画布编排任务。遵循用户指南here:
signature('tasks.add', args=(2, 2), countdown=10)
我遇到任务NotRegistered
错误。
如何按名称注册任务?
答案 0 :(得分:0)
没有看到您的代码,我们实际上无法为您提供帮助。因此,我将使用文档大致回答您的问题:
作为参考,这是celery的示例片段:
from celery import Celery
app = Celery('tasks', broker='pyamqp://guest@localhost//')
@app.task
def add(x, y):
return x + y
请注意,我们创建签名tasks.add
是因为应用程序在tasks
构造函数中被命名为Celery
,而函数被命名为add
。该任务已注册,因为它位于task.py文件中。因此,要按名称调用任务,我们必须确保三件事:
tasks
模块中。Celery
构造函数的调用来找到它。这是您在启动工作程序时传递给-A
参数的内容。app.task
装饰器中未指定名称,请使用函数名称。否则,请使用在name
装饰器中指定的app.task
。 在确保(1)之后,将(2)和(3)连接起来,并在它们之间放置一个.
,以获取要调用的任务名称。