芹菜:组内的链 - 部分签名失败

时间:2017-03-29 15:46:52

标签: python celery

这是我想要做的一个非常简单的例子:

@shared_task
def add(x, y):
    return x + y

@shared_task
def sub(x, y):
    return x - y

@shared_task
def mult(x, y):
    return x * y

c = group(
    chain(
        add.s(4), mult.s(2)
    ),
    sub.s(1)
)(3)

这应该给我结果[14, 2],但我收到以下错误消息:

  

TypeError:add()只需要2个参数(给定1个)

因此,部分签名似乎有问题,并且初始3未传递给我的链中的函数。这有什么问题,有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

任何添加的参数(3)都将仅添加到签名(task.s)中的args。他们不会被传播到基元(如链,组,和弦)。

如果您事先知道添加的参数,则可以执行

c = group(
    chain(
        add.s(4, 3), mult.s(2)
    ),
    sub.s(1)
)(3)

否则,您必须重新设计工作流程。