Beim Erstellen eines Benachrichtigungsclients, der eine anfängliche Verbindung erfordert , ist es wichtig, eine effiziente Möglichkeit zu finden, es auf allen Endpunkten zu nutzen, um Leistungsverzögerungen zu vermeiden. Wir stellen zwei mögliche Ansätze vor, um dieses Szenario anzugehen.
Mit dem app.state-Attribut können benutzerdefinierte Klassenobjekte gespeichert werden außerhalb der Hauptdatei. Dies ermöglicht den Zugriff auf den Benachrichtigungsclient über das Request-Objekt, selbst wenn mit einem Submodul gearbeitet wird, das APIRouter verwendet. Es ist möglich, das Objekt entweder mithilfe eines inzwischen veralteten Startereignisses oder einer Lebensdauerfunktion zu initialisieren.
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 # ...
Mit Die Einführung des Lifespan-Handlers von Starlette, die Objektinitialisierung und -nutzung können innerhalb des request.state verwaltet werden. Dieser Handler bietet auch Funktionen zum Starten und Herunterfahren. Durch Hinzufügen des initialisierten Objekts zum Statuswörterbuch wird es innerhalb von Endpunkten mithilfe von request.state zugänglich.
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 # ...
Beide Ansätze sind effektiv Lösungen zur Wiederverwendung eines globalen Objekts oder einer Variablen in FastAPI-Endpunkten. Welche Option am besten für eine bestimmte Anwendung geeignet ist, hängt von den spezifischen Anforderungen und der Architektur ab.
Das obige ist der detaillierte Inhalt vonWie kann ein globales Objekt auf allen FastAPI-Endpunkten effizient initialisiert und wiederverwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!