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

How can I get to run `loop.run_until_complete()` itself asynchronously on 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执行完之后,它才会进入第一个l_x的执行第二 loop.run_until_complete()

但我宁愿同时 运行 所有这些,也不喜欢合并这三个结果,因为它们都不相关。在这种情况下,我还能同时运行所有这些吗?

您可以 运行 这些协同程序,按如下方式排队:

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

如果您想单独保留每个协程的结果,那么您可以让每个协程将结果分配给一些 class 级别的实例变量。