如何在asyncio python中使用子进程模块限制并发进程数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在asyncio python中使用子进程模块限制并发进程数相关的知识,希望对你有一定的参考价值。

import asyncio
import asyncio.subprocess
args="blah blah argument "     
create=asyncio.create_subprocess_shell(args,stdout=asyncio.subprocess.PIPE)
proc = await create
output= await proc.stdout.read( )

这是我的服务器代码的一部分,它从客户端获得1000次并行命中。现在我应该如何限制服务器创建的最大子进程数以运行参数blah blah。因为这是代码使用100%的我的CPU。我需要在smae cpu上部署其他服务器

答案

asyncio.Semaphore是限制同时工作的内部反击的一种方式:

sem = asyncio.Semaphore(10)

async def do_job(args):
    async with sem:  # Don't run more than 10 simultaneous jobs below
        proc = await asyncio.create_subprocess_shell(args, stdout=PIPE)
        output = await proc.stdout.read()
        return output

请注意,您应该确保工作数量的增加速度不会比您实际完成的速度快得多。否则,你需要一些比这更复杂的东西。

以上是关于如何在asyncio python中使用子进程模块限制并发进程数的主要内容,如果未能解决你的问题,请参考以下文章

asyncio模块

使用 asyncio 将 bash 作为 Python 的子进程运行,但 bash 提示被延迟

python并发编程-线程(threading模块)

如何使用 asyncio 从使用 SubprocessProtocol 的子进程中读取并在任意点终止该子进程?

如何使用 python 的 asyncio 模块正确创建和运行并发任务?

使用 asyncio 等待子进程的结果