首页 > 解决方案 > 芹菜链在 django 上不起作用

问题描述

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

当 task1 完成时调用 task2。我已经做了这个到现在

为了按顺序执行我的任务,我使用了我在文档中找到的链方法。但是我的任务并不需要最后一个任务的结果才能像文档所说的那样工作。所以,我定义CELERY_IGNORE_RESULT = True了链方法在执行时不从上一个任务中获取结果。

这是我如何做我的代码

任务.py

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

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

视图.py

from .task import task1, task2
from celery import chain

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

我所做的每一次尝试都出现了这个错误:

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

有谁知道我该如何解决这个问题?

标签: djangopython-3.xcelerydjango-celery

解决方案


问题是......你应该改为链签名

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

来自文档:

链原语让我们将签名链接在一起,以便一个接一个地调用,本质上形成一个回调链。

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


推荐阅读