Je souhaite utiliser un cache local de thread en mémoire pour une valeur de la base de données qui ne va pas changer au cours d'un cycle de demande/réponse, mais qui est appelé des centaines (potentiellement des milliers) de fois. Ma compréhension limitée est que l'utilisation d'une variable "global"/module est une façon d'implémenter ce type de cache.Les variables "globales" (module) python sont-elles locales?
par exemple:
#somefile.py
foo = None
def get_foo(request):
global foo
if not foo:
foo = get_foo_from_db(request.blah)
return foo
Je me demande si l'utilisation de ce type de « global » est thread-safe en python, et que je peux donc être à l'aise que get_foo_from_db() sera appelé exactement une fois par demande/cycle de réponse dans django (en utilisant soit runserver ou gunicorn + gevent). Est-ce que ma compréhension est correcte? Cette chose est appelée assez que même l'utilisation de memcached pour stocker la valeur va être un goulot d'étranglement (je le profile en ce moment même).
Cela a du sens. Question de suivi ici: http://stackoverflow.com/questions/15365780/how-to-implement-thread-safe-in-memory-cache-of-value-in-django –