2009-07-12 100 views
9

我有一个很大的数组,我只想在django启动时将其加载到内存中,然后将其视为只读全局变量。什么是放置该数组初始化代码的最佳位置?Django初始化

如果我把它放在settings.py中,它会在每次导入设置模块时重新初始化,是否正确?

回答

9

settings.py是正确的地方。 Settings.py和其他模块一样,只加载一次。仍然存在一个问题,即每个进程必须导入一次模块,因此重新生成样式的Web服务器(如apache)将针对每个实例重新加载一次。对于mod_python,这将在每个进程中执行一次。对于mod_wsgi,这很可能只是一次,除非你必须重新启动。

tl; dr模块被导入一次,即使使用多个导入语句。把它放在settings.py

+2

对于mod_wsgi,每个进程对于该Django实例也是一次。可能有多少进程取决于您是使用嵌入模式还是守护进程模式,以及您的Django实例运行的进程数。有关mod_wsgi的不同操作模式的更多详细信息,请参阅“http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading”。 – 2009-07-13 01:10:24

+0

在settings.py中进行初始化通常会导致循环导入问题。我曾多次与此斗争过,并且我警告任何人这样做是为了关注循环进口。 – 2013-07-18 10:21:54

15

settings.py是用于Django的设置;将自己的设置放在那里很好,但将它用于任意非配置数据结构并不是好的做法。

只要将它放在它逻辑上属于的模块中,并且每个实例只运行一次。如果要保证模块在启动时加载,而不是稍后再使用,请从顶级__init__.py导入该模块,以强制立即加载该模块。