我有一个我运行的主函数,asyncio
然后在它里面我曾经event_loop.run_in_executor()
运行一个阻塞函数的多个进程。
我想做的是在每个进程中为每个进程运行一个新的 asyncio 循环,以便执行异步代码。
所以我有一个主要的异步函数,我在其中创建多个进程,并且我想在每个进程中创建一个新的 asyncio 循环。如何才能做到这一点?
我有一个我运行的主函数,asyncio
然后在它里面我曾经event_loop.run_in_executor()
运行一个阻塞函数的多个进程。
我想做的是在每个进程中为每个进程运行一个新的 asyncio 循环,以便执行异步代码。
所以我有一个主要的异步函数,我在其中创建多个进程,并且我想在每个进程中创建一个新的 asyncio 循环。如何才能做到这一点?
您可以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())