0

我有一个我运行的主函数,asyncio然后在它里面我曾经event_loop.run_in_executor()运行一个阻塞函数的多个进程。

我想做的是在每个进程中为每个进程运行一个新的 asyncio 循环,以便执行异步代码。

所以我有一个主要的异步函数,我在其中创建多个进程,并且我想在每个进程中创建一个新的 asyncio 循环。如何才能做到这一点?

4

1 回答 1

2

您可以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())
于 2021-10-26T20:42:30.190 回答