Wie initialisieren Sie ein globales Objekt oder eine Variable und verwenden Sie es in jedem Fastapi -Endpunkt wiederher?
Posted: 23 Feb 2025, 08:09
Ich habe eine Klasse, um Benachrichtigungen zu senden. Bei der Initialisierung beinhaltet dies eine Verbindung zu einem Benachrichtigungsserver, der zeitaufwändig ist. Ich verwende eine Hintergrundaufgabe in Fastapi, um Benachrichtigungen zu senden, da ich die Antwort aufgrund der Benachrichtigung nicht verzögern möchte. Unten finden Sie den Beispielcode:
file1.py
File2.py
initialisiert haben, aber es wird jedes Mal initialisiert, wenn eine Anfrage eintrifft, und das würde einige Zeit erfordern. Gibt es eine Möglichkeit, eine Middleware zu verwenden, um sie jedes Mal wiederzuverwenden, wenn eine Anfrage eintrifft, damit sie nicht jedes Mal initialisiert werden muss. Initialisieren Sie die Benachrichtigung in der Klassendefinition:
file1.py
file1.py
Code: Select all
noticlient = NotificationClient()
@app.post("/{data}")
def send_msg(somemsg: str, background_tasks: BackgroundTasks):
result = add_some_tasks(data, background_tasks, noticlient)
return result
Code: Select all
def add_some_tasks(data, background_tasks: BackgroundTasks, noticlient):
background_tasks.add_task(noticlient.send, param1, param2)
result = some_operation
return result
< /code>
Hier wird der Benachrichtigungs -Client global deklariert. Ich hätte es in [b] file2.py [/b] unter add_some_tasks
file1.py
Code: Select all
class childFastApi(FastAPI):
noticlient = NotificationClient()
app = childFastApi()
@app.post("/{data}")
def send_msg(somemsg: str, background_tasks: BackgroundTasks):
result = add_some_tasks(data, background_tasks, app.noticlient)
return result