在以下代码中:
loop = asyncio.get_event_loop()
l_x = map(async_func, data_x)
l_y = map(async_func, data_y)
l_z = map(async_func, data_z)
x = loop.run_until_complete(asyncio.gather(*l_x))
y = loop.run_until_complete(asyncio.gather(*l_y))
z = loop.run_until_complete(asyncio.gather(*l_z))
async_func
包含I / O任务并且需要更长的时间,所以我将使用asyncio
同时运行它。
然而,问题是我发现它在第一个loop.run_until_complete()
之后阻止了执行,并且只有在完成l_x
上的所有执行之后,它才会执行第二个loop.run_until_complete()
。 {1}}。
但我宁愿同时运行所有这些,也不喜欢合并三个结果,因为它们都是无关紧要的。在这种情况下,我可以同时运行所有这些吗?
答案 0 :(得分:3)
您可以通过对它们进行排队来同时运行这些协同程序:
l1 = asyncio.gather(*l_x)
l2 = asyncio.gather(*l_y)
l3 = asyncio.gather(*l_z)
results = loop.run_until_complete(asyncio.gather(l1, l2, l3))
如果你想分别保留每个协同程序的结果,那么你可以让每个协同程序将结果分配给某些类级实例变量。