Die Hallo Welt Demo für Flask ist:Wenn ich mit einem globalen Singleton in Flask (WSGI) arbeite, muss ich mich über die Rennbedingungen Gedanken machen?
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
Was passiert, wenn ich dies wie so geändert:
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()
ich WSGI Anwendung verstehen könnten mehrere Threads haben. Die hello
-Funktion könnte gleichzeitig auf mehreren Threads ausgeführt werden, und dann hätten wir eine Racebedingung. Ist das richtig? Wenn der obige Code nicht Thread-sicher ist, was kann ich tun, um es threadsicher zu machen?
Die Vermeidung von Globalen ist eine mögliche Lösung, aber können Sie Globals immer vermeiden? Was ist, wenn ich etwas wie einen Python-Objektcache möchte?
Ihr Beispiel (geschnitten und geklebt genau) gibt ein 500 für mich, weil ein vor der Zuweisung referenziert wird. – jeremyjjbrown
Dies beantwortet die gestellte Frage nicht wirklich. Müssen Sie sperren? Unter welchen Bedingungen? Ist das nur für Dolmetscher ohne GIL? – Basic