等待所有任务在Celery python中运行

问题描述 投票:0回答:1

我正在使用Python中的芹菜用于异步任务。我想捕获分配给所有工作人员的所有任务后的结果。

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

下面是我的摘录。

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

芹菜中是否还有其他方法可以等待所有任务异步运行?

python-3.x asynchronous django-celery celery-task
1个回答
1
投票

但是get()的问题是所有任务都被分配给一个同步的工人

嗯,不完全是。任务分配的工作原理相同(即使它可以似乎可以执行其他操作),并且任务本身仍然是异步的。区别在于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()调用现在将等待所有任务完成,但是它们将并行启动。

© www.soinside.com 2019 - 2024. All rights reserved.