芹菜:我如何在不超时父任务的情况下链接一个长时间运行的任务?

2024-09-28 01:26:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个需要300多秒才能完成的任务,我相信(尽管还没有确认)芹菜不希望你创建长时间运行的任务。因此,我没有增加芹菜任务的时间限制,而是尝试使用chain重构任务,将其分解为更短的运行步骤:

当前代码

@task
def long_task():
  # Each step can take over 2 minutes
  x = step1()
  y = step2(x)
  z = step3(y)

def main():
  # this fails with timeout frequently
  long_task.delay()

重构代码

@task
def step1():
  ...

@task
def step2():
  ...

@task
def step3():
  ...

@task
def chained_task():
  c = chain(step1.s(), step2.s(), step3.s())
  c.delay()

def main_refactored():
  # will this still timeout?
  chained_task.delay()

我的问题是:这种设计真的会阻止超时吗?我不这么认为,因为chained_task()内的链仍然必须在时间限制内完成,而且仅仅因为我们正在分配子部分的任务并将它们链接起来,整个链仍然必须连续完成,这似乎与以前没有什么不同

我想真正地将父任务分解为多个部分,像一个链一样以串行顺序执行这些部分,并使用3个任务(耗时100秒)而不是单个任务(耗时300秒)来完成这些任务。我相信chain是我所需要的,但不知道如何在这里使用它。谢谢你的指导


Tags: 代码chaintaskmaindef时间thislong

热门问题