在下面的代码中:
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()
的执行。
但我宁愿同时运行所有这些结果,也不喜欢合并三个结果,因为它们都是无关的。在这种情况下,我还可以同时运行所有这些吗?
最佳答案
您可以通过按如下方式对它们进行排队来同时运行这些协程:
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))
如果您想单独保留每个协程的结果,那么您可以让每个协程将结果分配给某些类级别实例变量。
关于python - 如何在 asyncio 上异步运行 `loop.run_until_complete()` 本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50218856/