Распространены ли настройки Django между работниками uwsgi? - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть приложение 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настройки, поэтому некоторые объяснения / детали будут высоко оценены.

1 Ответ

0 голосов
/ 20 ноября 2018

Точно.

Похоже, что uwsgi только спам-процессы самого приложения django, поэтому все функции ready будут вызваны только один раз, во время первого запуска.

...