导入python模块会占用太多内存

时间:2015-08-27 14:30:30

标签: python python-import memory-profiling

我正在开发一个相当大的现有Python应用程序,我现在正在尝试减少其内存使用量 感谢memory_profiler我得到了这个:

23   11.289 MiB    0.434 MiB    from remote import settings
24   14.422 MiB    3.133 MiB    from remote.controller import ChannelManager
25   14.422 MiB    0.000 MiB    from remote import channel as channel_module

正如您在第24行所见,内存使用量增加了3.13MB 为什么导入一个简单的类(ChannelManager)应该使用如此多的内存? ChannelManager不是一个复杂的类,它只包含一些逻辑(产生一些进程和线程) 谢谢

2 个答案:

答案 0 :(得分:4)

除非这三兆字节是一个问题,否则我会花时间分析应用程序本身,因为在您的实际清理逻辑中可能会有一些低调的成果。

当您import模块时,Python会将该模块编译为字节码(通常称为.pyc文件),并将其内容存储到内存中。您正在导入的模块(例如remote.controller.ChannelManager)可能是许多行或引用一个对象,使其编译的表单占用了这么多的空间。

您的选择要么接受使用ChannelManager对象的成本,要么选择较小的模块以降低使用率。我会强烈建议前者并查找使用更多内存的代码部分 - 特别是如果您使用的是Python 2.x并且有些区域可以使用迭代器。

答案 1 :(得分:0)

from remote.controller import ChannelManager会将整个remote.controller模块导入内存(如果尚未导入)。因此ChannelManager可能根本不是罪魁祸首。可能是remote.controller有一大堆依赖项,在那个时间点没有加载到内存中。

我会在使用内存的地方自行分析模块。这很可能是一次性成本,不值得尝试进行优化。