У меня есть приложение Django с настройкой (в моем файле settings.py), которая динамически заполняется в функции ready()
моего приложения Config.Т.е. в settings.py
у меня есть:
POPULATE_THIS = None
, а затем в apps.py в готовности у меня есть:
def ready(self):
if POPULATE_THIS is None:
POPULATE_THIS = ... some code which instantiates an object I need that's effectively a singleton ...
Кажется, это работает нормально.Но я сейчас нахожусь в точке, где вместо того, чтобы просто запускать сервер dev локально (т.е. python manage.py runserver
), я теперь запускаю приложение Django через uwsgi (прокси за nginx), и uwsgi настроен для запуска 10 рабочих процессов (т. е. мой файл uwsgi ini содержит processes = 10
и threads = 1
).
Я вижу доказательства того, что даже при наличии 10 процессов uwsgi, ready()
по-прежнему вызывается ровно один раз при запуске приложения, и значениеPOPULATE_THIS
одинаково для всех работников (выполнение строки для него дает один и тот же адрес памяти).
Мой вопрос: как это значение распределяется между процессами uwsgi, так как я думал, что отдельные процессы различны ине разделяете память?И правильно ли я предположил, что ready()
будет вызываться один раз при запуске приложения (т. Е. При запуске самого uwsgi), а не один раз при запуске рабочего процесса uwsgi?
Этот ответ ( Несколькосерверные процессы, использующие nginx и uWSGI ) по другому вопросу, по-видимому, указывают на то, что некоторые данные совместно используются рабочими, но я не могу найти какие-либо официальные документы, которые указывают, что именно передается и каким образом, особенно в отношении Djangoнастройки, поэтому некоторые объяснения / детали будут высоко оценены.