芹菜链不适用于Django

时间:2018-08-23 13:49:07

标签: django python-3.x celery django-celery

我的目的是依次调用两个任务

任务1完成后,请调用任务2。到目前为止,我已经做到了

为了按顺序执行任务,我使用在文档中找到的chain方法。但是我的任务并不需要文档中所说的最后一个任务的结果。因此,我将CELERY_IGNORE_RESULT = True定义为链方法,执行时不取前一个任务的结果。

这就是我编写代码的方式

  

task.py

@app.task
def task1(param):
     ...

@app.task
def task2(param):
    ....
  

views.py

from .task import task1, task2
from celery import chain

chain(task1.delay(identifier), task2.delay(identifier))().get()

每次尝试都出现此错误:

  

|:'AsyncResult'和'AsyncResult'不支持的操作数类型

有人知道我该如何解决吗?

1 个答案:

答案 0 :(得分:1)

问题是...您应该链接签名

chain(task1.s(identifier), task2.s(identifier))().get()

来自文档:

  

链式基元使我们可以将签名链接在一起,这样一个签名就可以在另一个上被调用,从而形成了回调链。

有关更多详细信息,请参见http://docs.celeryproject.org/en/latest/userguide/canvas.html#canvas-designing-work-flows