芹菜部分究竟是做什么用的?
What exactly are celery partials for?
我没有从 celery documentation 那里确切地知道芹菜 partials 的用途。我可能想用那个,但不确定我的想法是否正确。
假设我有以下两个任务:
add(a, b, c)
multiply(d, e)
让我们假设这两项任务需要更长的时间才能完成。是否可以使用偏音来:
- 运行
add(?, b, c)
与 multiply(d, e)
并行
- 将
multiply(d, e)
的结果作为最后一个参数传递给 add()
?
这种方式并行添加 b
和 c
以及 d
和 e
运行 的乘法,当两者都完成时,只有结果乘法传递给 add
任务。这可以节省一些时间,因为 b
和 c
总和已经计算好了,在第二步中只将 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())
我没有从 celery documentation 那里确切地知道芹菜 partials 的用途。我可能想用那个,但不确定我的想法是否正确。
假设我有以下两个任务:
add(a, b, c)
multiply(d, e)
让我们假设这两项任务需要更长的时间才能完成。是否可以使用偏音来:
- 运行
add(?, b, c)
与multiply(d, e)
并行
- 将
multiply(d, e)
的结果作为最后一个参数传递给add()
?
这种方式并行添加 b
和 c
以及 d
和 e
运行 的乘法,当两者都完成时,只有结果乘法传递给 add
任务。这可以节省一些时间,因为 b
和 c
总和已经计算好了,在第二步中只将 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())