芹菜将并行任务链接到和弦

时间:2020-04-02 08:12:18

标签: python python-3.x redis celery celery-task

我正在努力解决这个异步任务处理设置问题。到目前为止,我一直在考虑使用Celery,但尚未锁定任何东西。唯一的要求是我可以将Redis用作代理并将任务分配到多个节点上。

pin

说明

  • Task1生成项目列表
  • Task2从Task1接收一项作为参数
  • Task2和Task3链接在一起,并且每个链接都是并行执行的
  • 所有Task2-Task3链均已完成(不需要从Task3传递任何数据)后,执行Task4。

那么问题是,我该如何用芹菜做这件事?

1 个答案:

答案 0 :(得分:1)

可以使用和弦和链功能完成此操作,请看一下示例。它应该适合您的需求。

from celery import Celery, chord, chain

backend = 'redis://redis:6379/'
app = Celery(result_backend=backend, backend=backend)


@app.task
def task1():
    argument = 123
    return chord([
        chain(task2.s(argument), task3.s()),
        chain(task2.s(argument), task3.s()),
        chain(task2.s(argument), task3.s()),
    ])(task4.s())


@app.task
def task2(argument):
    pass


@app.task
def task3(result_task2):
    pass


@app.task
def task4(result):
    pass


task1.apply_async()
相关问题