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

2022-03-31 00:00:00 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不是一个复杂的类,它只是包装了一些逻辑(派生了一些进程和线程)。
谢谢您


解决方案

除非这3 MB是一个问题,否则我会花时间分析应用程序本身,因为在您的实际清理逻辑中可能有容易摘到的果实。

当您import一个模块时,Python会将该模块编译成字节码(通常被视为.pyc文件)并将其内容存储到内存中。您正在导入的模块(例如remote.controller.ChannelManager)可能有很多行或引用了一个对象,从而使其编译后的形式占用了该空间。

您的选择要么接受这一点作为使用ChannelManager对象的代价,要么选择一个较小的模块以降低使用率。我强烈建议使用前者,并寻找使用更多内存的代码部分--特别是如果您使用的是Python2.x,并且有些领域可以使用迭代器。

相关文章