我有一个Django应用程序,它的设置(在我的settings.py文件中)是在我的app Config的ready()
函数中动态填充的。在settings.py
中,我有:
POPULATE_THIS = None
然后在apps.py in ready中,我有:
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个工作进程(即我的uwsgi ini文件具有processes = 10
和threads = 1
)。
我看到的证据表明,即使有10个uwsgi进程,ready()
在应用程序启动时仍然只调用一次,并且POPULATE_THIS
的值在所有工作进程中都是相同的(对它执行字符串就是给出相同的内存地址)。
我的问题是:这个值是如何在uwsgi进程之间共享的,因为我认为单独的进程是不同的,并且不共享任何内存?我假设ready()
在每个应用程序启动时都会被调用一次(即当uwsgi本身启动时),而不是每个uwsgi工作进程启动时调用一次,这样的假设正确吗?
这个不同问题的答案(Multiple server processes using nginx and uWSGI)似乎表明一些数据是在工人之间共享的,但我似乎找不到任何官方文档来说明共享的确切内容和方式,特别是关于Django设置,所以一些解释/细节将非常感谢。
发布于 2018-11-20 07:34:32
一点儿没错。
看起来uwsgi只对django应用程序本身的进程进行了垃圾邮件处理,因此所有函数ready
在第一次运行时只会被调用一次。
https://stackoverflow.com/questions/53384081
复制相似问题