建立需要初始連線的通知客戶端時,重要的是找到一種有效的方法在所有端點上利用它以避免效能延遲。我們提出了兩種可能的方法來解決這種情況。
使用 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中文網其他相關文章!