芹菜链任务用例



假设函数a,b,...,必须按顺序运行。我们可以做一个任务来做到这一点:

def a(...):
    ...
def b(...):
    ...
...
@app.task
def abc(...):
    a(...)
    b(...)
    ...

或者,我们可以将它们设置为单独的任务:

@app.task
def a(...):
    ...
@app.task
def b(...):
    ...
...

并将它们链接起来:

@app.task
def abc(...):
    chain(a.s(...), b.s(...), ...)
    ...

第一个版本比第二个版本快(可能不是很多,取决于任务开销与在 a、b 中花费的平均时间......我想一定有原因chain但我还没有弄清楚。

有几种用例:

  1. 你只希望你的任务可以由芹菜客户端组合,而不是在芹菜代码库中预定义工作流(即,你可以在客户端上使用链来提交任务!
  2. 您希望独立监视每个子任务。 由于链将每个子任务作为单独的任务启动,因此每个子任务都可以独立于另一个进行监控。 如果你有一个函数将另外两个函数称为 python 函数,则无法挂接到芹菜监控。
  3. 您希望专门化工作线程/服务器,以便链的任务 A 在一种类型的服务器上运行,链的任务 B 在另一种类型的服务器上运行(例如,为了安全(。

这个列表可以继续下去,但我肯定在生产环境中使用了这三个。 祝你好运!

相关内容

  • 没有找到相关文章

最新更新