【问题标题】:Celery chain not working on django芹菜链在 django 上不起作用
【发布时间】:2019-01-29 22:14:52
【问题描述】:

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

task1 完成后调用 task2。到现在我都做了这个

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

这是我的代码编写方式

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”

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

【问题讨论】:

  • 请发布完整回溯。

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


【解决方案1】:

问题是……你应该用链签名代替:

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

来自文档:

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

更多详情见http://docs.celeryproject.org/en/latest/userguide/canvas.html#canvas-designing-work-flows

【讨论】:

  • 就像我的函数不带参数,而是使用签名 .s() 替换 .si() 不可变签名并解决我的问题,谢谢@trinchet
猜你喜欢
  • 1970-01-01
  • 2015-06-01
  • 2020-12-09
  • 2019-10-05
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 2021-07-12
相关资源
最近更新 更多