monde bonjour démo pour Flask est:En travaillant avec un singleton global dans Flask (WSGI), dois-je m'inquiéter des conditions de course?
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
si je modifié cela comme si:
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()
Je comprends l'application WSGI pourrait avoir plusieurs threads. La fonction hello
peut être exécutée sur plusieurs threads en même temps, puis nous avons une condition de concurrence. Est-ce correct? Si le code ci-dessus n'est pas sécurisé, que puis-je faire pour le rendre sûr?
Éviter les globals est une solution possible, mais pouvez-vous toujours éviter les globals? Que faire si je veux quelque chose comme un cache d'objets python?
Votre exemple (coupé et collé exactement) retourne 500 pour moi, car un est référencé avant l'affectation. – jeremyjjbrown
Cela ne répond pas réellement à la question posée. Avez-vous besoin de verrouiller? Sous quelles conditions? Est-ce seulement pour les interprètes sans GIL? – Basic