芹菜部分究竟是做什么用的?

What exactly are celery partials for?

我没有从 celery documentation 那里确切地知道芹菜 partials 的用途。我可能想用那个,但不确定我的想法是否正确。

假设我有以下两个任务:

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

  1. 运行 add(?, b, c)multiply(d, e)
  2. 并行
  3. multiply(d, e) 的结果作为最后一个参数传递给 add()?

这种方式并行添加 bc 以及 de 运行 的乘法,当两者都完成时,只有结果乘法传递给 add 任务。这可以节省一些时间,因为 bc 总和已经计算好了,在第二步中只将 a 添加到预先计算的结果中?

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

不,你对 celery partials 的工作原理有错误的认识。

在指定所有参数之前,它们无法执行。

如果您执行以下操作

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())