FastAPI 中的启动后事件?

KOB*_*KOB 6 python events fastapi

我有一个为 ML 模型提供服务的 FastAPI 应用程序。它部署在 Kubernetes 上。对于最佳实践,Kubernetes 建议在 API 中实现一个活跃端点,它可以探测该端点以查看应用程序何时完成启动,以及一个就绪端点以探测该端点以查看应用程序何时准备好开始接收请求。

目前,我已将活跃度和就绪端点实现为单个端点,200一旦加载 ML 模型并且端点可用于请求,该端点就会返回状态代码。

这没问题,但理想情况下,我希望 FastAPI 启动完成后返回一个活跃端点,并在模型加载后200返回一个就绪端点(比应用程序启动花费的时间长得多)。200

FastAPI 允许启动事件触发器,我可以在其中启动模型的加载,但在应用程序启动完成之前没有端点可用,而在启动事件也完成之前,应用程序启动不会完成。

无论如何,是否可以在 FastAPI 中实现“启动后”事件,以便我可以启动模型的加载?

这是我想要实现的一些简单示例代码:

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)
Run Code Online (Sandbox Code Playgroud)

小智 0

目前只有 2 个事件:“shutdown”和“startup”

这些是 ASGI 协议的一个小节,由 Starlette 实现并可在 FastAPI 中使用。