【问题标题】:Post-startup event in FastAPI?FastAPI 中的启动后事件?
【发布时间】:2022-09-24 06:40:30
【问题描述】:

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

目前,我已将 liveliness 和 readiness 端点实现为单个端点,一旦加载了 ML 模型并且端点可用于请求,它将返回状态代码 200

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

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

无论如何要在 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)
  • 老实说,我想不到。您可以做的是创建另一个继承自 FastAPI 的 FastAPI 类(比如说CustomFastAPI),然后在其中调用super.__init__(**kwargs),然后再调用加载模型的方法?想起来可能真的有用。
  • 好主意!让我试试

标签: python events fastapi


【解决方案1】:

目前只有 2 个事件:“关闭”和“启动”

这些是 ASGI 协议的一个子部分,由 Starlette 实现并在 FastAPI 中可用。

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

【讨论】:

    猜你喜欢
    • 2021-07-27
    • 2023-01-04
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多