Wie initialisieren Sie ein globales Objekt oder eine Variable und verwenden Sie es in jedem Fastapi -Endpunkt wiederher?

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Wie initialisieren Sie ein globales Objekt oder eine Variable und verwenden Sie es in jedem Fastapi -Endpunkt wiederher?

by Guest » 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

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
File2.py

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

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

Top