如何在asyncio上异步运行`loop.run_until_complete()`本身?

时间:2018-05-07 16:40:57

标签: python python-asyncio

在以下代码中:

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}}。

但我宁愿同时运行所有这些,也不喜欢合并三个结果,因为它们都是无关紧要的。在这种情况下,我可以同时运行所有这些吗?

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))

如果你想分别保留每个协同程序的结果,那么你可以让每个协同程序将结果分配给某些类级实例变量。

相关问题