如何在 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 级别的实例变量。
在下面的代码中:
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 级别的实例变量。