我正在使用Python中的芹菜用于异步任务。我想捕获分配给所有工作人员的所有任务后的结果。
为此,我正在使用。get()方法,但是get()的问题是所有任务都分配给一个同步的工人,但我希望将任务分配给所有可用的工人。
下面是我的摘录。
for url in urls:
res = good_bad_urls.delay(url[1])
res.get()
return JsonResponse(some_data)
芹菜中是否还有其他方法可以等待所有任务异步运行?
但是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()
调用现在将等待所有任务完成,但是它们将并行启动。