是否在uwsgi工作者之间共享Django设置?

时间:2018-11-19 23:23:30

标签: django python-3.x uwsgi

我有一个Django应用,其设置(在settings.py文件中)是动态填充在应用配置的ready()函数中的。即在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 ...

这似乎正常。但是,我现在不仅仅在本地运行开发服务器(即python manage.py runserver),还通过uwsgi(代理nginx)运行Django应用,并且将uwsgi配置为运行10个worker进程(即,我的uwsgi ini文件具有processes = 10threads = 1)。

我看到的证据表明,即使有10个uwsgi进程,ready()在应用程序启动时仍被调用一次,并且POPULATE_THIS的值在所有工作程序中都是相同的(它给出了相同的内存地址。

我的问题:在uwsgi进程中该值如何共享,因为我认为单独的进程是不同的并且不共享任何内存?我是否假设ready()将在每个应用启动时被调用一次(即,当uwsgi自身旋转时),而不是在每个uwsgi worker进程启动时被调用一次?

这个关于另一个问题的答案(Multiple server processes using nginx and uWSGI)似乎表明某些数据是在工作人员之间共享的,但是我似乎找不到任何官方文档来表明确切共享的内容以及共享方式,特别是在尊重方面到Django设置,因此不胜感激。

1 个答案:

答案 0 :(得分:0)

完全正确。

uwsgi似乎只是django应用程序本身的垃圾邮件处理程序,因此在第一次运行期间,所有功能for(int i=0; i<100; i++){ View "obj"+i = findViewById(R.id.view+i); } 仅被调用一次。