我没有从celery documentation得知芹菜 partials 的用途。我可能想要使用它,但不确定我的想法是否正确。
让我们说我有两个任务:
PureRenderMixin
add(a, b, c)
让我们假设这两项任务需要更长时间才能完成。是否可以使用partials:
multiply(d, e)
add(?, b, c)
multiply(d, e)
的结果作为最后一个参数传递给multiply(d, e)
?这样添加add()
和b
以及c
和d
的乘法并行运行,当两者都完成时,只将乘法结果传递给{ {1}}任务。这可以节省一些时间,因为已经计算了e
和add
和,而在第二步中只将b
添加到预先计算的结果中?
如果是这样,我该如何实现?我的意思是在c
任务中等待提供a
参数的方式是什么?我试过,但没有找到关于该主题的任何相关文档......
答案 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())