Мне нужно сохранить некоторые настройки в ОЗУ. Я создал файл «cache_values.py»Переменные настройки во время выполнения django
class CacheValue:
pass
Я хочу использовать его в качестве контейнера переменной для моих нужд.
Я пишу некоторые настройки для «CacheValue» на старте сервера:
from cms.models.pagemodel import Page
from modifier.cache_values import CacheValue
def cache_start_values():
CacheValue.page_publish_dates={}
pages=Page.objects.all()
for page in pages:
CacheValue.page_publish_dates[page.pk]=page.last_publish_date
CacheValue.last_publish_date=max(CacheValue.page_publish_dates.values())
Кроме того, когда я спасаю некоторые модели - я изменить эти параметры
CacheValue.page_publish_dates[self.pk]=self.last_publish_date
CacheValue.last_publish_date=max(CacheValue.page_publish_dates.values())
Но когда я хочу использовать эти параметры в моих шаблонах, добавив их с процессором контекста в качестве переменных - начинается какая-то магия.
from modifier.cache_values import CacheValue
def add_for_cache_info(request):
context_extras = {}
context_extras['page_publish_dates']=CacheValue.page_publish_dates
context_extras['last_publish_date_all_pages']=CacheValue.last_publish_date
if "current_page" in request.__dict__:
context_extras['last_publish_date']=CacheValue.page_publish_dates[request.current_page.pk]
return context_extras
В шаблоне
{{ page_publish_dates }}
{{ last_publish_date_all_pages }}
Значения, которые я вижу в оказываемом чередуется шаблонным между старым (до модели сохранить) и новый (после модели сэкономить) каждый раз, когда я refersh страницы. 0_0 0_0
Если я сохраню модель (значение изменения) второй раз - она изменит между самым старым значением и новым.
Почему?
Правильный ответ - несколько процессов с несколькими потоками вызывают подобные проблемы. Кэширование является хорошим выбором здесь, но не используйте [Кэширование локальной памяти] (https://docs.djangoproject.com/en/dev/topics/cache/#local-memory-caching), поскольку оно не используется совместно процессы. Существуют также решения для распределенной координации (например, Zookeeper), но они скорее перебор. Memcached или какой-то магазин с ключевыми значениями также похожи на один, но трудно найти другую надежную альтернативу. – Tadeck
Итак, как я понимаю, нет никакого способа постоянно изменять настройки во время выполнения в ram, используя только переменные и классы python. Я прав? – 124bit
Я спрашиваю, потому что я не хочу использовать memcache для хранения только даты и ждать, когда я получу его оттуда – 124bit