创建需要初始连接的通知客户端时,重要的是找到一种有效的方法在所有端点上利用它以避免性能延迟。我们提出了两种可能的方法来解决这种情况。
使用 app.state 属性,可以存储自定义类对象在主文件之外。这允许通过 Request 对象访问通知客户端,即使在使用使用 APIRouter 的子模块时也是如此。可以使用现已弃用的启动事件或生命周期函数来初始化对象。
from fastapi import FastAPI, Request from contextlib import asynccontextmanager @asynccontextmanager async def lifespan(app: FastAPI): app.state.n_client = NotificationClient() yield app.state.n_client.close() app = FastAPI(lifespan=lifespan) @app.get('/') async def main(request: Request): n_client = request.app.state.n_client # ...
随着Starlette的生命周期处理程序的引入,对象的初始化和使用可以在request.state中进行管理。该处理程序还提供启动和关闭功能。通过将初始化的对象添加到状态字典中,可以使用 request.state 在端点内访问它。
from fastapi import FastAPI, Request from contextlib import asynccontextmanager @asynccontextmanager async def lifespan(app: FastAPI): n_client = NotificationClient() yield {'n_client': n_client} n_client.close() app = FastAPI(lifespan=lifespan) @app.get('/') async def main(request: Request): n_client = request.state.n_client # ...
两种方法都提供有效的在 FastAPI 端点中重用全局对象或变量的解决方案。最适合特定应用程序的选项将取决于特定的要求和架构。
以上是如何跨所有 FastAPI 端点高效地初始化和重用全局对象?的详细内容。更多信息请关注PHP中文网其他相关文章!