Dans mon application, l'état d'un objet commun est modifié en faisant des demandes, et la réponse dépend de l'état.
class SomeObj():
def __init__(self, param):
self.param = param
def query(self):
self.param += 1
return self.param
global_obj = SomeObj(0)
@app.route('/')
def home():
flash(global_obj.query())
render_template('index.html')
Si je l'exécute sur mon serveur de développement, je m'attends à obtenir 1, 2, 3 et ainsi de suite. Si les demandes proviennent de 100 clients différents simultanément, un problème peut-il se produire? Le résultat attendu serait que les 100 clients différents voient chacun un numéro unique de 1 à 100. Ou quelque chose comme ceci se produira:
- Requêtes du client 1.
self.param
est incrémenté de 1. - Avant que l'instruction return puisse être exécutée, le thread bascule vers le client 2.
self.param
est à nouveau incrémenté. - Le thread revient au client 1 et le client reçoit le numéro 2, par exemple.
- Maintenant, le thread passe au client 2 et lui renvoie le numéro 3.
Puisqu'il n'y avait que deux clients, les résultats attendus étaient 1 et 2, pas 2 et 3. Un nombre a été omis.
Cela se produira-t-il réellement au fur et à mesure que j'améliore mon application? Quelles alternatives à une variable globale dois-je envisager?
la source