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

标签 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()的执行。

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

最佳答案

您可以通过按如下方式对它们进行排队来同时运行这些协程:

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/

相关文章:

python - 使用键盘输入制作基本的Python计数器

python - 使用Python+Flask实现高效的 session 变量服务器端缓存

python - HTC Vive 的 Maya 为 90 fps

python-3.x - 如何使用不支持异步的库?

python - 异步 : Wait for event from other thread

django - 如何在 Jupyter Notebook 中使用 django 3.0 ORM 而不触发异步上下文检查?

python - 检测协程是否需要异步循环

python - 从 Pandas 索引中查找整数行索引

python - 使用 pythoncom 在 Python 进程之间编码(marshal) COM 对象

python-asyncio - 使用替代事件循环而不设置全局策略