芹菜 - 从嵌套链返回结果

时间:2014-03-22 11:34:22

标签: python celery

我正在尝试在Celery任务中使用嵌套链。以下是我所面临的问题类型的人为举例。

add_tasks.py:

from celery import Celery, chain

app = Celery('add_tasks', broker='amqp://guest@localhost//')

app.conf.CELERY_RESULT_BACKEND = 'redis://localhost/0'

@app.task
def add(x, y):
    return x + y

@app.task
def inner_chain(x):
    # range parameter could change
    task_list = [add.s(x,x)] + [add.s(x) for _ in xrange(10)] 
    return chain(*task_list)() #.get()

@app.task
def outer_chain():
    return chain(
            add.s(1,1),
            inner_chain.s()
    )() #.get()

add_tester.py:

from add_tasks import outer_chain

r = outer_chain.delay()

print r.get()
print r.get().get()
print r.get().get().get()

目前我将获得表格的输出:

Result-ID
Result-ID
Result

在我的两个链任务中取消注释.get()会导致死锁,并引发有关运行同步子任务的警告,但我不知道如何传递子任务的结果。

做出此类事情的正确方法是什么?我是否需要在任务中使用apply_async?

0 个答案:

没有答案