Django загружает экземпляры объектов только один раз, делает их доступными для запуска приложения

У меня есть приложение (Django 1.6), которое использует около 4000 объектов для обработки естественного языка (NLP), ранее созданных.

Все прикладные процессы (запросы, тесты, пользовательские команды управления и т. Д.) Должны каким-то образом использовать все эти объекты.

То, что я хотел бы сделать, – загрузить все эти объекты только один раз в момент запуска (или около того) и сохранить их в памяти, чтобы сделать их доступными для всех процессов приложений.

У этого сообщения есть некоторые подсказки, но я хотел бы услышать ваши мысли о том, какой лучший подход к ситуации.

Уточнение : 4000 объектов используются только для чтения во всех процессах, они никоим образом не изменяются в приложении.

Огромное спасибо.

Вы можете поместить все данные в кеш, а также воспользоваться преимуществами кэша кэша Memcached. Таким образом, данные могут быть быстро, безопасно и легко доступны любому из ваших процессов.

Лучшая идея в этой ситуации – это, вероятно, запуск специального процесса только для этого. Любой другой способ и ваши объекты не гарантированно едины в вашем кластере развертывания.

Если вы развертываете с использованием отдельных рабочих процессов, у вас будет несколько разных копий ваших данных NLP (по одному на процесс), а если вы развертываете с использованием совместных потоков (например, при использовании рабочих-gunicorn gevent), вы должны убедиться, что ваш код является потокобезопасным.

Я бы настроил это как внешнюю службу, выполняемую по выделенному процессу, и каждый клиент обратился к этой службе, используя ваш выбор внутрипроцессного взаимодействия (сокеты, HTTP, что угодно).

Для локальной разработки, тестирования и простоты развертывания вы всегда можете вернуться к загрузке этих объектов в свои настройки проектов.

Вы можете использовать Redis. Клиент python работает хорошо, и, возможно, вы даже можете использовать rom, который кажется приятным для моделирования ваших данных. Отказ от ответственности: я использовал Redis раньше, но я никогда не пользовался ромом, я только что нашел его пару дней назад, и я подумал, что стоит его разделить.

Удачи!