小心导入内容

发布日期:2026-07-20 00:44:05  来源 : 杭州电子商务研究院    浏览量 :0
杭州电子商务研究院 发布日期:2026-07-20 00:44:05  
0

介绍

最近,我学到了关于导入Python应用程序的宝贵经验。通常,我只需找到所需的模块,导入它,然后使用它,不会出现任何问题。然而,我发现不必要的导入有时会导致大量内存浪费。

动态搜索导入

我在编写一个工具时遇到了这个问题,我打算用这个工具在Python 模块和/或包中搜索给定的对象。这个脚本很有趣,值得单独写一篇文章。要点你为脚本提供两个参数,要搜索的模块/包和要搜索的术语。然后,脚本应该会为你列出它找到包含搜索词的对象的所有位置。

例如,PyQt4的文档很难搜索。我倾向于使用标准Qt文档,然后将找到的任何示例转换为Python PyQt4 包装器的代码。

重复?

我使用 PyQt4 应用程序中使用的各种术语(例如MinimumExpandingNoEditTriggers )测试了我的脚本:

      python import_searcher.py -s MinimumExpanding

    PyQt4.Qt.QSizePolicy.MinimumExpanding = 3
    PyQt4.QtGui.QSizePolicy.MinimumExpanding = 3
    PyQt4.Qwt5.qplt.QSizePolicy.MinimumExpanding = 3
    

注意到上面的输出有什么奇怪吗?看起来MinimumExpanding出现在两个几乎相同的位置—— PyQt4.QtPyQt.QtGui 。自然,我认为我的脚本中有一个错误,但经过一些调试和阅读后,我在PyQt4 Wikipedia 页面上发现了以下珍宝

Qt 模块将上述所有模块中包含的类合并为一个模块。这样做的好处是您不必担心哪个底层模块包含特定类。它的缺点是它会加载整个 Qt 框架,从而增加应用程序的内存占用。是否使用此合并模块或单个组件模块取决于个人喜好。

因此,使用PyQt4.Qt模块实际上是多余的,只是为了方便。结果,我们实际上导入了许多笨重且多余的模块,例如QtDesignerQtWebKitQtHelp

例如,假设你的应用程序只使用了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。这可能会造成高昂的成本,具体取决于您的应用程序已使用的内存量以及系统可用的内存量。虽然这种情况涉及较小的数字,但多次不必要的导入很容易累积,从而导致更严重的内存使用问题。

道德启示

  1. 谨慎对待进口商品。进口商品可能是多余的、昂贵的,或者两者兼而有之。

  2. 仔细阅读文档。PyQt4主文档提到了这个冗余的PyQt4.Qt模块,并对其进行了如下描述:“将所有其他模块合并为一个模块,以方便使用,但会占用大量内存。

  3. 记得尝试一些东西,玩一玩,享受编码的乐趣。一次性脚本可以带来不错的、有用的发现。

以上内容来自杭州电子商务研究院推送
分享到:

长按或扫码识别 分享给好友

长按或扫码识别 分享给好友
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据