在Django视图中高效导入模块

时间:2009-07-13 01:47:00

标签: python django performance import python-module

我想知道 - 人们如何处理在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成为一个misc文件,其中包含任何需要的内容 - 因此,许多视图最终导入了他们不需要的模块。

这是否会影响效率?也就是说,python(django?)是否导入所有模块一次并存储/缓存它们,以便需要它们的任何其他视图不必再次导入它?或者我调用这个长文件的方法非常低效 - 我最好坚持在每个视图中单独导入这些模块?

这种事情是否有最佳做法?

谢谢!

3 个答案:

答案 0 :(得分:6)

Python本身保证模块只加载一次(除非显式调用reload,这不是这里的情况):在第一次之后,该模块的import直接绑定其名称来自sys.modules[themodulename],一个非常快速的操作。所以Django不需要进行任何进一步的优化,你也不需要。

最佳做法是避免生产代码中的from ... import *(使每个名称来自更清晰,更易于维护,便于测试等)和导入模块,“单独地”放置它,确切位置它们是需要的(通过绑定更少的名称,可以节省几微秒,绝对不会浪费任何,但“明确比隐含更好” - 清晰度,可读性,可维护性 - 无论如何都是主要的考虑因素。) p>

答案 1 :(得分:0)

我猜你可以把经常使用的导入打到你的__init__.py文件中。

答案 2 :(得分:0)

Django不是CGI(或PHP)。您的应用程序是一个(或几个)长期运行的Python进程。无论启动需要多长时间,每个HTTP请求都只会调用您已经加载的视图函数。

相关问题