![](/img/trans.png)
[英]Difference between connecting to the database in app.on_event('startup') vs in a dependency in FastAPI
[英]Post-startup event in FastAPI?
我有一个提供 ML model 的 FastAPI 应用程序。 它部署在 Kubernetes 上。 对于最佳实践 Kubernetes 建议在您的 API 中实现一个活泼端点,它可以探测以查看应用程序何时完成启动,以及一个就绪端点以探测以查看应用程序何时准备好开始接收请求。
目前,我已将 liveliness 和 readiness 端点实现为单个端点,一旦加载了 ML model 并且端点可用于请求,它将返回状态代码200
。
这没关系,但理想情况下,我希望在 FastAPI 的启动完成后返回200
的活跃度端点,并在加载模型后返回200
的就绪端点(比应用程序启动需要更长的时间)。
FastAPI 允许启动事件触发器,我可以在其中启动 model 的加载,但在应用程序启动完成之前没有端点可用,在启动事件也完成之前不会完成。
无论如何要在 FastAPI 中实现和“启动后”事件,我可以在其中启动 model 的加载?
这是我想要实现的一些简单示例代码:
from fastapi import FastAPI, Response
from request import PredictionRequest
import model
app = FastAPI()
@app.on_event("post-startup") # not possible
def load_model():
model.load()
@app.get("/live")
def is_live():
return Response(status_code=200)
@app.get("/ready")
def is_ready():
if model.is_loaded():
return Response(status_code=200)
else:
return Response(status_code=409)
@app.post('/predict')
def predict(request: PredictionRequest):
return model.predict(request)
目前只有 2 个事件:“关闭”和“启动”
这些是 ASGI 协议的一个子部分,由 Starlette 实现并在 FastAPI 中可用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.