La demo hola mundo para Frasco es:Trabajando con un singleton global en Flask (WSGI), ¿tengo que preocuparme por las condiciones de carrera?
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
¿Qué pasa si he modificado este 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()
entiendo aplicación WSGI podría tener varios subprocesos. La función hello
podría ejecutarse en varios subprocesos al mismo tiempo, y luego tendríamos una condición de carrera. ¿Es esto correcto? Si el código anterior no es seguro para subprocesos, ¿qué puedo hacer para que sea seguro?
Evitar los globales es una posible solución, pero ¿siempre se puede evitar los globales? ¿Qué sucede si quiero algo así como un caché de objetos de Python?
Su ejemplo (cortar y pegar exactamente) devuelve un 500 para mí, ya que una está referenciado antes de la asignación. – jeremyjjbrown
Esto en realidad no responde la pregunta establecida. ¿Necesita _necesitar_ bloquear? ¿Bajo que condiciones? ¿Esto es solo para intérpretes sin GIL? – Basic