FastAPI实现多进程部署
- Python
- 18小时前
- 5热度
- 0评论
1 fastAPI多进程部署
fastAPI默认是单进程部署,如果需要多进程部署,需要添加worker参数
- app:需要是字符串,文件名:app
- workers:进程数量,一般等于CPU数量即可
uvicorn.run(app='sisRealData2RestfulAPI:app',host='0.0.0.0',port=8000,workers=10)特别注意:多进程部署不要添加reload参数
源码如下,
@property
def should_reload(self):
return isinstance(self.app, str) and (self.debug or self.reload)if (config.reload or config.workers > 1) and not isinstance(app, str):
logger = logging.getLogger("uvicorn.error")
logger.warning(
"You must pass the application as an import string to enable 'reload' or "
"'workers'."
)
sys.exit(1)
if config.should_reload:
sock = config.bind_socket()
ChangeReload(config, target=server.run, sockets=[sock]).run()
elif config.workers > 1: # 必须走这个分支才能多进程部署
sock = config.bind_socket()
Multiprocess(config, target=server.run, sockets=[sock]).run()
else:
server.run()- should_reload必须为False,即reload和debug都不能开,并且app必须是带引号的字符串格式
2 问题
看起来fastAPI的多进程不太智能,开启三个进程,用六次请求,其中连续三次都走的一个进程,导致CPU没有被充分利用,目前策略是多开进程