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

导入python模块会占用太多内存,python,python-import,memory-profiling,Python,Python Import,Memory Profiling,我正在开发一个相当大的现有Python应用程序,现在我正在尝试减少其内存使用。 多亏了我,我得到了这个: 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 a

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

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不是一个复杂的类,它只是包装一些逻辑(生成一些进程和线程)。

谢谢

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

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


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

除非这三兆字节是一个问题,我会花时间分析应用程序本身,因为在实际的清理逻辑中可能会有一些悬而未决的问题

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


您可以选择接受这一点作为使用
ChannelManager
对象的成本,或者选择一个较小的模块以降低使用率。我强烈建议使用前者,并寻找使用更多内存的代码部分——特别是如果您使用的是Python 2.x,并且可以使用迭代器。

从remote.controller导入ChannelManager
将整个
remote.controller
模块导入内存(如果尚未导入)进口的。因此,
ChannelManager
可能根本不是罪魁祸首。可能是
remote.controller
有大量依赖项,这些依赖项在当时没有加载到内存中


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

从remote.controller导入ChannelManager
将整个
remote.controller
模块导入内存(如果尚未导入)。因此,
ChannelManager
可能根本不是罪魁祸首。可能是
remote.controller
有大量依赖项,这些依赖项在当时没有加载到内存中


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

如果没有看到
ChannelManager
是什么,就很难知道发生了什么。“远程”的包是什么?我不能将代码粘贴到这里。如果没有看到
ChannelManager
是什么,就很难知道发生了什么。什么是“远程”的包我不能在这里粘贴代码。