等到所有任务都在 Celery python 中 运行

Wait till all tasks are run in Celery python

我在 python 中使用 celery 进行异步任务。我想在分配给所有工人的所有任务完成后捕获它的结果。

为此,我正在使用 .get() 方法,但是 get() 的问题是所有任务都被分配给同步的单个 worker但我希望将任务分配给所有可用的工作人员。

下面是我的代码片段。

for url in urls:
    res = good_bad_urls.delay(url[1])
    res.get()
return JsonResponse(some_data)

celery有没有其他方法异步等到所有任务运行?

but the problem with get() is that all the tasks are being assigned to a single worker which is synchronous

嗯,不完全是。任务分配的工作原理是一样的(即使它可以 似乎 不这样做),并且任务本身仍然是异步的。不同之处在于 result.get() 是一个阻塞调用 - 因此在您的情况下,它会等待当前任务完成,直到它启动下一个任务。

但无论如何:这里的解决方案是use a Group。在你的情况下,它应该看起来像

jobs = group([good_bad_urls.s(url[1]) for url in urls])
async_res = jobs.apply_async()  
result = async_res.get()

get() 调用现在将等待所有任务完成,但它们将并行启动。