我刚开始使用FastAPI和mongodb,我有点迷失在FastAPI中如何处理并发?
我是否需要为每个新请求启动/启动一个新的线程/任务,或者它是自动处理的?以下面的代码为例:
@router.get("/UserProfile",tags=['Dashboard'], dependencies=[Depends(JWTBearer())])
def get_user_profile(user: str, Authorization: str | None = Header(default=None)):
token = Authorization.replace("Bearer ", "")
decoded = jwt.decode(token, options={"verify_signature": False})
user_id = decoded['user_id']
if db.Admin.count_documents({'username': user_id}):
data = db.Users.find_one({'username': user}, {
"_id": 0, "phone": 1, "email": 1, "username": 1, "state": 1, "dob": 1, "add": 1})
return {"message": data}
else:
return {"message": "Un-Authorized!"}
这段代码正在接受来自客户端的请求,然后检查jwt是否有效,如果有效则检查请求用户是否与管理数据库中的用户匹配,如果用户匹配则从"users"获取用户的配置文件数据;
这段代码对我打算做的事情很好,但我的问题是,如果有1000个请求到相同的/UserData
端点会发生什么?如果我们考虑与上面相同的代码,那么所有1000个请求都将同时处理吗?还是一个接一个处理?
我试图理解如何"一次多个请求";在fastapi
中处理如前所述,您的代码将一次处理一个请求。要一次处理多个请求,可以使用multiprocessing。
FastAPI不直接处理请求,web服务器(例如:uvicorn)。如果你用uvicorn运行FastAPI,你可以使用Gunicorn定义一些uvicorn worker来一次处理多个请求,就像这样(用你的文件名替换main,用你的web应用程序的名称替换app):
gunicorn main:app --workers 4 --worker-class
有关如何使用Uvicorn和FastAPI安装和配置Gunicorn的更多信息,请参阅此页:Server Workers - Gunicorn with Uvicorn