Arbeiten mit einem globalen singleton im Kolben (WSGI), muss ich befürchten, race conditions?
Des hello-world-demo für Kolben:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
Was ist, wenn ich Sie modifiziert habe dies so:
from flask import Flask
app = Flask(__name__)
a = 1
b = 2
c = 3
@app.route("/")
def hello():
a += 1
b += a
c += b
return "Hello World!"
if __name__ == "__main__":
app.run()
Verstehe ich WSGI-Anwendung kann mehrere threads. Die hello
- Funktion kann ausgeführt werden, auf mehrere threads zur gleichen Zeit, und dann hätten wir eine race-Bedingung. Ist das richtig? Wenn der obige code ist nicht thread-sicher, was kann ich tun, um es thread-sicher?
Vermeidung von globals ist eine mögliche Lösung, aber die kann man immer vermeiden globals? Was ist, wenn ich etwas will, wie ein python-Objekt-cache?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie eine Sperre:
Könnten Sie versuchen, die Lokale Klasse von werkzeug.
Hier einige Infos über Sie: Kontext Einheimischen
Beispiel:
Könnten Sie werfen Sie einen Blick auf die
g
Objekt, das Sie importieren direkt aus der Flasche, hält ein Objekt Global für die Anforderung. Wenn Sie eine event-driven-WSGI-server (tornado, gevent, etc) solltest du keine Probleme haben.g
Objekt war nur der Zustand, in eine Anfrage, und war somit nicht sinnvoll, für den genannten Anwendungsfall.