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

如何在asyncio python中使用子进程模块限制并发进程的数量,python,subprocess,python-asyncio,Python,Subprocess,Python Asyncio,这是我的服务器代码的一部分,它从客户端获得1000次并行点击。现在我应该如何限制服务器创建的最大子进程数以运行参数等等。因为这是我的代码使用100%的cpu。我需要在smae cpu上部署其他服务器是限制同时作业的内部计数器的一种方法: import asyncio import asyncio.subprocess args="blah blah argument " create=asyncio.create_subprocess_shell(args,stdout=asyncio

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

是限制同时作业的内部计数器的一种方法:

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( )

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

像芹菜和兔肉这样的东西值得考虑吗?从长远来看,它可能会给你更多的可伸缩性和更好的控制。只是一个想法。客户端通过websocket连接。我运行的进程受cpu限制,所以我需要异步支持,这使我更喜欢异步IO。芹菜和RMQ支持这一点吗?我从未使用过:/Celery是一个异步任务队列,而RabbitMQ是任务代理。本文给出了一个很好的示例—它可能不适合您的应用程序,但如果您以前没有遇到过它,则值得探索。
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