如何在主异步循环内的同步子进程内 运行 多个异步循环?
How to run multiple asyncio loops inside syncrhonous sub-processes inside a main asyncio loop?
我有一个主函数,我 运行 和 asyncio
然后在里面我使用了 event_loop.run_in_executor()
到 运行 阻塞函数的多个进程。
我想做的是在每个进程中 运行 为每个进程创建一个新的异步循环以执行异步代码。
所以我有一个主异步函数,我在其中创建了多个进程,我想在每个进程中创建一个新的异步循环。如何做到这一点?
您只需在您的子进程中调用 asyncio.run
,并使用协程处理您想执行的异步工作。一个启动 5 个进程的最小示例,每个进程都有自己的事件循环:
import asyncio
from concurrent.futures import ProcessPoolExecutor
def run_loop_in_process():
async def subprocess_async_work():
await asyncio.sleep(5) #whatever async code you need
asyncio.run(subprocess_async_work())
async def main():
loop = asyncio.get_running_loop()
pool = ProcessPoolExecutor()
tasks = [loop.run_in_executor(pool, run_loop_in_process) for _ in range(5)]
await asyncio.gather(*tasks)
if __name__ == "__main__":
asyncio.run(main())
我有一个主函数,我 运行 和 asyncio
然后在里面我使用了 event_loop.run_in_executor()
到 运行 阻塞函数的多个进程。
我想做的是在每个进程中 运行 为每个进程创建一个新的异步循环以执行异步代码。
所以我有一个主异步函数,我在其中创建了多个进程,我想在每个进程中创建一个新的异步循环。如何做到这一点?
您只需在您的子进程中调用 asyncio.run
,并使用协程处理您想执行的异步工作。一个启动 5 个进程的最小示例,每个进程都有自己的事件循环:
import asyncio
from concurrent.futures import ProcessPoolExecutor
def run_loop_in_process():
async def subprocess_async_work():
await asyncio.sleep(5) #whatever async code you need
asyncio.run(subprocess_async_work())
async def main():
loop = asyncio.get_running_loop()
pool = ProcessPoolExecutor()
tasks = [loop.run_in_executor(pool, run_loop_in_process) for _ in range(5)]
await asyncio.gather(*tasks)
if __name__ == "__main__":
asyncio.run(main())