首页 > 解决方案 > 我可以发布一个导入的包以在 python 中节省内存吗?

问题描述

我在 python 程序中导入了一些包。但是其中很多只在程序过程开始时被调用。这些包是否保存在内存中,直到整个程序完成运行?我可以在调用它们释放内存后删除它们吗?

标签: pythonpython-importpython-internals

解决方案


我不认为这是可能的 - 但即使是这样,通过擦除加载的模块获得的内存通常也是最小的。

del module在某个文件的代码中运行不会将其从内存中删除:所有加载的模块都可以从全局 sys.modules字典中获得。如果您从 sys.modules 中删除模块,您可以获得一些空间,但我认为 Python 仍将至少保留对模块中定义的类的引用(即使您没有这些类的实例或其他引用)代码中的类。)

总而言之,大多数模块都会让您返回几千字节。如果您计划“卸载”对内存有数兆字节影响的模块(想想 Pandas/matplotlib/sqlalchemy),您将更不可能成功,因为这些代码库的复杂性意味着它们有很多内部交叉引用,您需要删除它们从 sys.modules 内部导入的所有内容。

如果设置基于这样的数兆字节框架,并且您在非常有限的系统上运行(例如,具有几 MB 的树莓级迷你 PC),您可以尝试在子进程中执行初始化,并且完成后终止该进程 - 这将为您提供一些保证内存已释放的保证。但是除了有限的硬件之外,您根本不应该为此烦恼。


推荐阅读