在多个apply_async可用时获取结果

时间:2019-11-16 05:46:49

标签: python-3.x celery

我有多个工人,每个工人都有自己的队列。它们都是使用apply_async运行的任务。

如何获得每个任务的结果,它们完成的顺序基本上是随机的。

有没有在不使用睡眠循环的情况下做到这一点的想法吗?

# task.py
@app.task
def mytask()
  n = random.randrange(1,10)
  time.sleep(n)
  return n

task1 = worker1.mytask.apply_async(queue='queue1')
task2 = worker2.mytask.apply_async(queue='queue2')
task3 = worker3.mytask.apply_async(queue='queue3')

希望应用停止运行,直到其中一个任务完成并返回第一个任务的结果。如果我添加.join()我必须在所有3个上使用并且不知道会先完成,就必须等到所有3个返回结果。

编辑:添加了示例代码

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用某些Celery workflow原语对它们进行分组,最明显的是Group