什么是芹菜偏食?

时间:2016-01-20 09:30:56

标签: celery

我没有从celery documentation得知芹菜 partials 的用途。我可能想要使用它,但不确定我的想法是否正确。

让我们说我有两个任务:

  • PureRenderMixin
  • add(a, b, c)

让我们假设这两项任务需要更长时间才能完成。是否可以使用partials:

  1. multiply(d, e)
  2. 并行运行add(?, b, c)
  3. multiply(d, e)的结果作为最后一个参数传递给multiply(d, e)
  4. 这样添加add()b以及cd的乘法并行运行,当两者都完成时,只将乘法结果传递给{ {1}}任务。这可以节省一些时间,因为已经计算了eadd和,而在第二步中只将b添加到预先计算的结果中?

    如果是这样,我该如何实现?我的意思是在c任务中等待提供a参数的方式是什么?我试过,但没有找到关于该主题的任何相关文档......

1 个答案:

答案 0 :(得分:1)

不,你对芹菜局部的工作原理有不正确的认识。

在指定所有参数之前,不能执行它们。

如果您执行以下操作

ch = chain(multiply.s(d, e), add.s(b, c))
ch.apply_async()

发生的事情是multiply是异步运行的。完成后,结果将传递给add,然后异步运行。

为了实现您所说的并行化,您可以使用以下内容:

@app.task
def add(a, b):
     return a + b

ch = chord(group(multiply.s(d, e), add.s(b, c)))(add.s())