FastAPI - 如何在路由器内获取应用程序实例?
我想在我的路由器文件中获取 app
实例,我该怎么办?
我的main.py
如下:
# ...
app = FastAPI()
app.machine_learning_model = joblib.load(some_path)
app.include_router(some_router)
# ...
现在我想在some_router的文件中使用app.machine_learning_model
,我该怎么办?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为 FastAPI 实际上是 Starlette 底层,您可以使用通用
app.state
属性将模型存储在应用程序实例上,如 Starlette 的 文档(请参阅State
类实现也是如此)。示例:对于从主文件外部访问
app
实例(以及随后的模型),您可以使用Request
对象。根据 Starlette 的文档,其中请求 可用(即端点和中间件),
app
在request.app
上可用。示例:或者,现在可以使用
request.state
来存储全局变量/对象,方法是在lifespan
处理程序中初始化它们,如中所述这个答案。Since FastAPI is actually Starlette underneath, you could store the model on the application instance using the generic
app.state
attribute, as described in Starlette's documentation (seeState
class implementation too). Example:As for accessing the
app
instance (and subsequently, the model) from outside the main file, you can use theRequest
object. As per Starlette's documentation, where arequest
is available (i.e., endpoints and middleware), theapp
is available onrequest.app
. Example:Alternatively, one could now use
request.state
to store global variables/objects, by initializing them within thelifespan
handler, as explained in this answer.