New*_*ser 5 python performance memory-management
我有一个非常大的 python 模块(超过 1 GB),我使用命令在另一个 python 脚本中从该模块导入一个类from module import class。问题是,当我第一次启动 python 脚本时,内存消耗非常高,并且脚本执行时间很长(几分钟!)。之后启动它时,花费的时间明显减少(几秒钟)并且使用的内存也减少了,但对我来说仍然很多。
我认为我的脚本所做的是,当我第一次将模块启动到内存中时,它会将模块中的所有数据加载到内存中,这就是为什么它需要如此多的时间和内存。
有没有办法改变这一点,而不是让我的脚本导入整个模块,而只导入我想要的特定部分?
感谢您抽出时间来回答:)
简短的回答:不,没有办法避免这种情况。第一次在 gien 进程中导入模块时,将执行其所有顶级语句(导入、def、类,当然还有赋值)来构建运行时对象module。这就是 Python 的工作方式,并且有非常充分的理由让它以这种方式工作。
现在这里的解决方案非常简单:1 /将巨大的模块拆分为适当的(高内聚/低耦合)模块,并仅导入您需要的部分,2 /而不是在顶层定义千兆字节的数据,封装这部分在某些缓存系统的功能中以避免无用的重新计算。