小心导入内容
介绍
动态搜索导入
重复?
我使用 PyQt4 应用程序中使用的各种术语(例如MinimumExpanding和NoEditTriggers )测试了我的脚本:
python import_searcher.py -s MinimumExpanding
PyQt4.Qt.QSizePolicy.MinimumExpanding = 3
PyQt4.QtGui.QSizePolicy.MinimumExpanding = 3
PyQt4.Qwt5.qplt.QSizePolicy.MinimumExpanding = 3
注意到上面的输出有什么奇怪吗?看起来MinimumExpanding出现在两个几乎相同的位置—— PyQt4.Qt和PyQt.QtGui 。自然,我认为我的脚本中有一个错误,但经过一些调试和阅读后,我在PyQt4 Wikipedia 页面上发现了以下珍宝:
Qt 模块将上述所有模块中包含的类合并为一个模块。这样做的好处是您不必担心哪个底层模块包含特定类。它的缺点是它会加载整个 Qt 框架,从而增加应用程序的内存占用。是否使用此合并模块或单个组件模块取决于个人喜好。
因此,使用PyQt4.Qt模块实际上是多余的,只是为了方便。结果,我们实际上导入了许多笨重且多余的模块,例如QtDesigner、QtWebKit和QtHelp。
例如,假设你的应用程序只使用了PyQt4.QtGui模块,而你错误地认为需要PyQt4.Qt中的某些内容。这个简单的导入可能会使你的内存使用量翻倍[1]:
Line # Mem Usage Increment Line Contents
================================================
1 @profile
2 def import_qt_module_by_module():
3 #from PyQt4 import QtCore
4 #from PyQt4 import QtDBus
5 6.953 MB 0.000 MB #from PyQt4 import QtDeclarative
6 12.844 MB 5.891 MB from PyQt4 import QtGui
7 #from PyQt4 import QtHelp
8 #from PyQt4 import QtMultimedia
9 #from PyQt4 import QtNetwork
10 #from PyQt4 import QtOpenGL
11 #from PyQt4 import QtScript
12 #from PyQt4 import QtScriptTools
13 #from PyQt4 import QtSql
14 #from PyQt4 import QtSvg
15 #from PyQt4 import QtTest
16 #from PyQt4 import QtWebKit
17 #from PyQt4 import QtXml
18 #from PyQt4 import QtXmlPatterns
19 #from PyQt4 import phonon
20 #from PyQt4 import QtAssitant
21 #from PyQt4 import QtDesigner
22 #from PyQt4 import QtAxContainer
23 19.387 MB 6.543 MB from PyQt4 import Qt
请注意,仅导入“PyQt4.Qt”就会使应用程序内存使用量增加6.543 MB。这可能会造成高昂的成本,具体取决于您的应用程序已使用的内存量以及系统可用的内存量。虽然这种情况涉及较小的数字,但多次不必要的导入很容易累积,从而导致更严重的内存使用问题。
道德启示
谨慎对待进口商品。进口商品可能是多余的、昂贵的,或者两者兼而有之。
仔细阅读文档。PyQt4主文档提到了这个冗余的PyQt4.Qt模块,并对其进行了如下描述:“将所有其他模块合并为一个模块,以方便使用,但会占用大量内存。 ”
记得尝试一些东西,玩一玩,享受编码的乐趣。一次性脚本可以带来不错的、有用的发现。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~