2009-07-12 103 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導入該模塊,以強制立即加載該模塊。