Sont des variables globales thread-safe dans le flacon? Comment puis-je partager des données entre les demandes?

Dans mon application de l'état d'un objet commun est changé 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 lance sur mon serveur de développement, je m'attends à obtenir 1, 2, 3 et ainsi de suite. Si les demandes sont fabriqués à partir de 100 différents clients simultanément, quelque chose peut aller mal? Le résultat attendu serait que le 100 clients différents, chacun d'un numéro unique de 1 à 100. Ou sera quelque chose comme cela arrivent:

  1. Client 1 requêtes. self.param est incrémenté de 1.
  2. Avant l'instruction return peut être exécutée, les commutateurs de thread sur le client 2. self.param est incrémenté de nouveau.
  3. Le thread permet au client 1, et le client est renvoyé le numéro 2, dire.
  4. Maintenant le fil se déplace vers le client 2 et renvoie le numéro 3.

Car il n'y avait que deux clients, les résultats attendus sont 1 et 2, pas 2 et 3. Un certain nombre a été ignorée.

Va de ce fait se passer comme je l'échelle de ma demande? Quelles sont les alternatives à une variable globale dois-je regarder?

InformationsquelleAutor sayantankhan | 2015-09-28