首页 > 解决方案 > 如何在 celery 中链接任务

问题描述

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

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

任务.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”

标签: pythonpython-3.xcelery

解决方案


阅读 Celery Canvas 的链原语(工作流程)。我建议阅读整个Canvas:设计工作流程部分。自然,它会讨论如何构建您所描述的任务链。


推荐阅读