如何在芹菜客户端中使用没有导入任务模块的画布?



假设我们有一个调用方A和一个被叫方BB实现了一些功能,并且具有繁重的依赖关系。

通常,我不想在A中导入这些依赖项以保持轻量级。

以前,我很乐意使用send_task来直呼B的名字。

现在我有更复杂的逻辑,并希望使用 canvas 编排任务。遵循此处的用户指南: signature('tasks.add', args=(2, 2), countdown=10)

我收到一个任务NotRegistered错误。

如何按名称注册任务?

如果没有看到您的代码,我们实际上无法为您提供帮助。 因此,我将使用文档一般回答您的问题:

作为参考,以下是芹菜的示例片段:

from celery import Celery
app = Celery('tasks', broker='pyamqp://guest@localhost//')
@app.task
def add(x, y):
return x + y

请注意,我们创建签名tasks.add是因为应用程序在Celery构造函数中被命名为tasks,函数名为add。 已注册此任务,因为它位于 tasks.py 文件中。 因此,要按名称调用任务,我们必须确保三件事:

  1. 任务是否正确注册? 我们可以通过查看芹菜工作线程启动时的输出来检查,并且工作线程输出已注册任务的列表。 如果没有,请确保任务位于芹菜知道要查找的 tasks.py 文件或tasks模块中。
  2. 我的应用程序名称是什么? 我们可以通过查找对Celery构造函数的调用来找到这一点。 它是您在启动工作线程时传递给-A参数的内容。
  3. 我的任务名称是什么? 如果未在app.task修饰器中指定名称,请使用函数名称。 否则,请使用app.task装饰器中指定的name

确保 (1( 后,连接 (2( 和 (3(,并在它们之间放置一个.以获取要调用的任务名称。

相关内容

  • 没有找到相关文章

最新更新