使用Canvas Workflow进行并行执行

时间:2016-07-15 18:13:17

标签: python parallel-processing workflow celery distributed-computing

我一直致力于一个项目,该项目要求尽可能以并行方式执行某些任务。下面的代码举例说明了问题:

# -*- coding: utf-8 -*-
from __future__ import absolute_import
from celery.app import Celery
from celery.utils.log import get_task_logger

logger = get_task_logger(__name__)

app = Celery('celeryproject', backend="redis://localhost:6379/0", broker="amqp://guest:guest@localhost:5672//")


@app.task
def step1(x):
    # get a list of str from a webservice using x
    return ["step1-%s-%s" % (x, i) for i in range(5)]


@app.task
def step2(y):
    # get a list of str from a webservice using x
    return ["step2-%s-%s" % (x, i) for i in range(5, 10)]


@app.task
def step3(z):
    # process the z
    logger.info(z)

@app.task
def pipeline(xs):
    for x in xs:
        r1_list = step1.delay(x).get()
        for r1 in r1_list:
            r2_list = step2.delay(x, r1).get()
            for r2 in r2_list:
                step3.delay(r2)

我需要执行task.pipeline来启动该过程。我尝试了一些Canvas Workflow示例(http://docs.celeryproject.org/en/latest/userguide/canvas.html)但是我遇到了一些问题。伙计们,能帮助我吗?

编辑: Step1返回一个列表,我想处理Step2中列表的每个元素。这也返回一个列表,我想处理Step3中列表的每个元素。

我想为Step1返回的每个元素应用Step2,并为之前返回的每个元素应用Step3。

我试过,例如: 弦(step1.s(' XXX'))(step2.map())

但是我得到了错误:

TypeError('map() takes exactly 2 arguments (1 given)',)

也尝试使用群组,但它没有用。

0 个答案:

没有答案