Il ciao mondo demo di Flask è:Lavorando con un singleton globale in Flask (WSGI), devo preoccuparmi delle condizioni di gara?
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
Che cosa succede se ho modificato questo modo:
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()
Capisco applicazione WSGI potrebbe avere più thread. La funzione hello
potrebbe essere in esecuzione su più thread contemporaneamente e quindi avremmo una condizione di competizione. È corretto? Se il codice sopra non è thread-safe, cosa posso fare per renderlo thread-safe?
Evitare le globali è una possibile soluzione, ma puoi sempre evitare i globali? Cosa succede se voglio qualcosa di simile a una cache di oggetti Python?
Il vostro esempio (tagliato e incollato esattamente) restituisce un 500 per me, perché una si faccia riferimento prima assegnazione. – jeremyjjbrown
Questo in realtà non risponde alla domanda indicata. Hai bisogno di bloccare? In quali condizioni? È solo per interpreti senza GIL? – Basic