1

当我尝试在Celery文档中使用add方法 with的示例时subtask,我无法获得最终结果。

@task
def add(x, y, callback=None):
    result = x + y
    if callback:
        subtask(callback).delay(result)
    return result

当我调用任务时;

>>> subadd = add.subtask(args=(5, ))
>>> r=add.apply_async(args=(1, 2,subadd))
>>> r.result
3

可以看出,它返回3而不是8.

当我运行这些部分时,工作人员出现错误。我不知道为什么会这样。

[2013-06-27 07:49:18,080: ERROR/MainProcess] Received unregistered task of type 'devicemanagement.celery_task.add'.

我应该怎么做才能从结果中得到 8?

谢谢你!

4

2 回答 2

2

不应该是以下情况:

r = add.apply_async((1, 2), link=add.s(5))
r.result

Celery - 链接(回调/errbacks)

于 2013-07-03T13:28:33.673 回答
1

在 >3.0 celery 中,chain 是另一个很酷的选择:

from celery import chain

r = chain(add.s(1, 2), add.s(5))()
#or using '|' operator
r = (add.s(1, 2) | add.s(1))()
r.result
于 2014-02-25T09:40:19.537 回答