python - 我可以发布一个导入的包以在 python 中节省内存吗?
问题描述
我在 python 程序中导入了一些包。但是其中很多只在程序过程开始时被调用。这些包是否保存在内存中,直到整个程序完成运行?我可以在调用它们释放内存后删除它们吗?
解决方案
我不认为这是可能的 - 但即使是这样,通过擦除加载的模块获得的内存通常也是最小的。
del module
在某个文件的代码中运行不会将其从内存中删除:所有加载的模块都可以从全局 sys.modules
字典中获得。如果您从 sys.modules 中删除模块,您可以获得一些空间,但我认为 Python 仍将至少保留对模块中定义的类的引用(即使您没有这些类的实例或其他引用)代码中的类。)
总而言之,大多数模块都会让您返回几千字节。如果您计划“卸载”对内存有数兆字节影响的模块(想想 Pandas/matplotlib/sqlalchemy),您将更不可能成功,因为这些代码库的复杂性意味着它们有很多内部交叉引用,您需要删除它们从 sys.modules 内部导入的所有内容。
如果设置基于这样的数兆字节框架,并且您在非常有限的系统上运行(例如,具有几 MB 的树莓级迷你 PC),您可以尝试在子进程中执行初始化,并且完成后终止该进程 - 这将为您提供一些保证内存已释放的保证。但是除了有限的硬件之外,您根本不应该为此烦恼。
推荐阅读
- php - 存储时如何正确加载定义或序列化 PHP 类的实例/对象?
- javascript - onMouseDown/onClick 事件里面
- javascript - 重复直到达到精确值
- c++ - 当我在二维数组参数中使用不带括号的引用运算符时,为什么会出现错误“声明为引用数组”?
- r - 匹配。使用 MatchIt 和 Matching 进行数据模拟和估计。如何检索真实模型?
- hazelcast - 优雅关闭 kafka 消费者
- r - 使用循环创建多个数据框和列
- html - text align:center 在宽度和显示方面表现不佳:inline-block
- amazon-web-services - 将 IIS 日志移动到 AWS s3 存储桶
- git - 如何一步完成拉取和合并?