Si consideri il seguente codice nella mia applicazione WebApp2 in Google App Engine:Capire la persistenza oggetto globale in Python WSGI apps
count = 0
class MyHandler(webapp2.RequestHandler):
def get(self):
global count
count = count + 1
print count
Con ogni aggiornamento della pagina, gli incrementi di conteggio superiore.
vengo dal mondo PHP dove ogni richiesta era un nuovo contesto globale. Quello che capisco di stare succedendo qui è che, poiché sto usando la configurazione wsgi per WebApp2, Python non avvia un nuovo processo su ogni richiesta. Se stavo usando una configurazione cgi, d'altra parte, l'ambiente globale sarebbe nuovamente un'istanza di volta in volta, come PHP ...
Supponendo che quanto sopra è corretto (In caso contrario, per favore correggetemi) ...
- Come posso gestire gli scenari in cui vorrei una variabile globale che persistesse solo per la durata della richiesta? Potrei inserire una variabile di istanza nella classe RequestHandler, ma per quanto riguarda le cose come i moduli di utilità che impongo che utilizzano le vars globali per cose come la memorizzazione di un oggetto messaggio?
- Esiste una tecnica per reimpostare tutte le variabili o per forzare una nuova istanziazione dell'ambiente?
- L'ambiente globale persiste indefinitamente o si ripristina da solo a un certo punto?
- Qualcuno di questi GAE è specifico o la persistenza globale di wsgi funziona allo stesso modo in qualsiasi scenario server?
EDIT:
Ecco un tentativo utilizzando ThreadLocal:
count = 0
mydata = threading.local()
mydata.count = 0
class MyHandler(webapp2.RequestHandler):
def get(self):
global count
count = count + 1
print count
mydata.count = mydata.count + 1
print mydata.count
Questi inoltre incrementare le richieste su
Esiste un motivo specifico per cui si tenta di archiviare dati globali al di fuori del datastore? Sembra che ciò che stai tentando potrebbe essere realizzato più facilmente con un [contatore a contrasto] (http://code.google.com/appengine/articles/sharding_counters.html). –
@ Kevin- quella variabile di conteggio era solo un esempio: il mio caso reale è qualcosa di completamente diverso - sto solo cercando di capire l'ambito globale all'interno del dominio dell'applicazione. – Yarin
correlati [Perché i piloni usano StackedObjectProxies invece di threading.local?] (Http://stackoverflow.com/q/1686768/95735) –