Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ein globales Objekt auf allen FastAPI-Endpunkten effizient initialisiert und wiederverwendet werden?

Wie kann ein globales Objekt auf allen FastAPI-Endpunkten effizient initialisiert und wiederverwendet werden?

Linda Hamilton
Linda HamiltonOriginal
2024-12-02 21:07:16682Durchsuche

How to Efficiently Initialize and Reuse a Global Object Across All FastAPI Endpoints?

Wie man ein globales Objekt oder eine Variable in jedem FastAPI-Endpunkt initialisiert und wiederverwendet

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.

Option 1: Verwendung von App.state

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.

Beispiel:

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
    # ...

Option 2: Einsatz von Starlettes Lifespan Handler

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.

Beispiel:

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn