Mi piacerebbe utilizzare una cache locale thread in memoria per un valore dal database che non cambierà durante un ciclo di richiesta/risposta, ma viene chiamato centinaia (potenzialmente migliaia) di volte. La mia comprensione limitata è che l'utilizzo di una variabile "globale"/modulo è un modo per implementare questo tipo di cache.Le variabili python "globali" (modulo) sono thread locali?
esempio:
#somefile.py
foo = None
def get_foo(request):
global foo
if not foo:
foo = get_foo_from_db(request.blah)
return foo
Mi chiedo se l'utilizzo di questo tipo di "globale" è thread-safe in python, e che quindi posso essere comodo che get_foo_from_db() verrà chiamato una sola volta per ogni richiesta/ciclo di risposta in django (usando runserver o gunicorn + gevent). La mia comprensione è corretta? Questa cosa viene chiamata abbastanza che persino l'uso di memcached per memorizzare il valore sarà un collo di bottiglia (lo sto profilando mentre parliamo).
Ha senso. Domanda successiva: http://stackoverflow.com/questions/15365780/how-to-implement-thread-safe-in-memory-cache-of-value-in-django –