如何在芹菜中链接任务

时间:2019-06-21 18:04:50

标签: python python-3.x celery

我希望能够在芹菜中链接任务,以便第二个任务仅在第一个任务完成后才能执行。

在下面的示例中,我声明了2个任务。 hello()world()。我希望world()仅在hello()完成后执行。

tasks.py

import os
from celery import Celery
from time import sleep


CELERY_BROKER = "pyamqp://guest@localhost//"

app = Celery('tasks', broker=CELERY_BROKER)


@app.task
def hello():
    sleep(2)  # simulate slow computation
    return "Hello"
@app.task
def world():
    sleep(2)  # simulate slow computation
    return "World"

api.py

from celery import chain
res = chain(hello.delay(), world.delay())
print(res)

这将引发以下错误:

  

TypeError:|:“ AsyncResult”和以下不受支持的操作数类型   “ AsyncResult”

1 个答案:

答案 0 :(得分:0)

了解Celery Canvas(工作流)的Chain原语。我建议阅读整个Canvas: Designing Work-flows部分。自然,它讨论了如何构建您所描述的task chains