簡體   English   中英

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 中可用。

https://asgi.readthedocs.io/en/latest/specs/lifespan.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM