Celery将并行任务链接到和弦中



我正试图了解这个异步任务处理设置。到目前为止,我一直在考虑使用Celery,但还没有锁定任何内容。唯一的要求是我可以使用Redis作为代理,并在多个节点上分配任务。

->  Task2  ->  Task3
Task1  ->  Task2  ->  Task3    [then]    Task4
->  Task2  ->  Task3

解释

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

问题是,我如何用芹菜做到这一点?

它可以使用chord和chain函数来完成,请看一个例子。它应该适合你的需要。

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()

相关内容

  • 没有找到相关文章

最新更新