Datos globales de Django para hilos

Tengo un objeto de datos globales compartidos en mi servidor django de procesos múltiples de proceso único, un objeto que se usa con frecuencia, pero se calcula con poca frecuencia. El cálculo lleva mucho tiempo, por lo que quiero compartir los resultados.

Pensé que funcionaría usar LocalMemCache de django para estos datos simples. Curiosamente, parece funcionar para varias llamadas ajax en una sola carga de página, pero por alguna razón, cuando recargo la página en mi navegador, la caché está vacía nuevamente.

¿Qué estoy haciendo mal?

¿Hay alguna manera mejor? ¿Una variable global sería igual de eficiente si controlo el acceso de escritura con un locking de subproceso?

Esto es básicamente lo que estoy haciendo:

from threading import Lock from django.core.cache import get_cache my_lock = Lock() cache = get_cache('default') def get_global_data(): my_lock.acquire() try: cached_data = cache.get('data') if not cached_data: cached_data = big_function_to_calculate_data() cache.set('data', cached_data) finally: my_lock.release() return cached_data # settings.py defines my django LocMemCache as: CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'my_server' } } 

Editar :

La causa principal del problema fue recuperar datos basados ​​en una lista de control de acceso (que no forma parte del código aquí), que varía según el tipo de solicitud (GET, POST), etc. Al calcular, esta fue una solicitud POST con un conjunto de acceso, y al leerlo era una solicitud GET con un conjunto diferente de acceso y estaba devolviendo un conjunto diferente (e inválido) de resultados.

Los trabajos anteriores. Como nota al margen, el uso de un caché de base de datos persistente parece ser preferible a LocMemCache.

 # run python manage.py createcachetable CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_cache_table' } } 

La causa principal del problema fue recuperar datos basados ​​en una lista de control de acceso, que varía según el tipo de solicitud (GET, POST), etc. Al calcular, esta fue una solicitud POST con un conjunto de acceso, y al leerla fue una Solicitud GET con un conjunto diferente de acceso.