fastapi uvicorn 多进程处理
uvicorn 对于多进程的支持可以通过配置wokers 参数,但是一般我们都使用的是模块类模式,并不是字符串(只有字符串模式才能生效)
以下是基于multiprocessing 如何实现类似的功能(机制上实际与uvicorn 的多worker是类似的)
参考代码
import multiprocessing as mp
from fastapi import FastAPI
import uvicorn
import copy
mp.allow_connection_pickling()
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
def start_server(app,sockets,port):
servers = []
for _ in range(number_of_processes):
app = copy.copy(app)
config = uvicorn.Config(app=app,port=port,host="0.0.0.0",log_level="info")
server = uvicorn.Server(config=config)
# 通过multiprocessing 以及server 共享socket模式进行多进程的管理
w = mp.get_context('fork').Process(target=server.run, args=(sockets,))
w.start()
servers.append(w)
return servers
if __name__ == '__main__':
number_of_processes = 4
port = 8000
config = uvicorn.Config(app=app, host="0.0.0.0", port=port, log_level="info")
sockets = [config.bind_socket()]
set_of_servers = start_server(app,sockets,port)
for server in set_of_servers:
server.join()
说明
LitServe 就使用了类似的技术进行多worker的支持
参考资料
https://github.com/Lightning-AI/LitServe
https://github.com/encode/uvicorn/blob/master/uvicorn/supervisors/multiprocess.py
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2022-11-11 github codespaces 可以使用了
2022-11-11 parcel segmentation fault 问题以及解决方法
2021-11-11 Faster Change Data Capture for your Data Lake
2021-11-11 使用jHiccup 分析java 应用性能
2020-11-11 sql/driver: couldn't convert "\x00" into type bool 问题
2020-11-11 linux crontab 简单说明
2019-11-11 yugabyte 安装pg_hashids 扩展