2009-07-13 15 views
3

我想知道 - 人們如何處理在django視圖中導入大量常用模塊?而最有效的方法是什麼?在Django視圖中有效地導入模塊

舉例來說,我已經有了喜歡的一些看法,

admin_views.py 
search_views.py 
. 
. 

,從我所看到的,他們每個人都需要使用的HttpResponse或其他這樣的常用模塊。此外,其中一些需要諸如BeautifulSoup之類的東西,而另一些則需要其他東西(md5,auth等)。

我在項目開始的時候確實是使一個include_all.py含有最常見的我進口,然後在視圖本身添加了這些具體的東西。所以,我有這樣的事情,

admin_views.py

from include_all import * 
... 
[list of specific module imports for admin] 
... 

search_views.py

from include_all import * 
... 
[list of specific module imports for search] 
... 

隨着時間的推移,該include_all成了什麼一個雜項文件被需要放進入它 - 因此,許多視圖最終導入他們不需要的模塊。

這會影響效率嗎?也就是說,python(django?)會導入所有模塊一次並存儲/緩存它們,以便需要它們的任何其他視圖不必再次導入它?或者,我調用這個長文件的方法是非常低效的 - 我最好堅持在每個視圖中單獨導入這些模塊?

這種事情是否有最佳做法呢?

謝謝!

回答

6

Python本身保證了模塊加載只有一次(除非reload顯式調用,這是不是這裏的情況):第一次後,該模塊的import只是直接從sys.modules[themodulename],極快的操作結合它的名字。所以Django不需要做進一步的優化,你也不需要做任何進一步的優化。

最好的做法是在生產代碼中避免from ... import *(使其更清晰,更易於維護,每個名稱都來自於,方便測試等)和導入模塊。 (通過可能綁定較少的名稱,可以節省幾微秒,絕對不會浪費任何東西,但「顯式優於隱式」 - 清晰性,可讀性,可維護性 - 無論如何都是主要考慮因素)。

+0

啊,這是另一個後續問題,我要問 - 特別是使用從... *和進口* ..謝謝! – viksit 2009-07-13 03:26:51

+0

@viksit,不客氣! – 2009-07-13 03:34:38

0

我想你可以把你經常使用的導入放到你的__init__.py文件中。

0

Django不是CGI(或PHP)。您的應用程序是一個(或幾個)長時間運行的Python進程。無論啓動需要多長時間,每個HTTP請求都會調用您的(已加載的)視圖函數。

相關問題