python代码中实时检测程序运行占用内存

这篇博客介绍了如何使用psutil库在Python中获取当前进程的内存使用情况。提供的get_current_memory_gb()函数可以插入到代码中实时打印Python运行时的内存占用。需要注意的是,此方法可能不包括与其他进程共享的内存,因此在PyCharm等环境中并行运行多个Python程序时,可能会显示较低的内存占用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import psutil

def get_current_memory_gb():

        pid=os.getpid()

        p=psutil.Process(pid)

        info=p.memory_full_info()

        return info.uss/1024./1024.

        查看程序运行内存,只需要将以上函数插入到python代码运行的地方即可实时打印python运行内存占用情况。

注意:该函数似乎只能测试python运行占用的内存,如果有共享其他内存的话占用的内存就会变少。如果在pycharm中同时并行运行两个python,另一个python程序占用很少,猜测是共享内存的缘故。

### Python运行时内存管理与资源释放 Python内存管理主要依赖于 **引用计数** 和 **垃圾回收器 (GC)** 来自动跟踪和释放未使用的对象。然而,在某些特定场景下,可能需要开发者主动干预以确保不必要的数据被清理。 #### 自动内存管理机制 Python 使用两种方法来管理内存: 1. **引用计数**: 当某个对象的引用计数降为零时,该对象会被立即销毁并释放其所占有的内存[^1]。这种机制对于大多数情况已经足够高效。 2. **循环引用检测**: 对于存在循环引用的情况(例如两个对象互相持有对方的引用),单纯依靠引用计数无法有效释放内存。此时,Python 的垃圾回收器会定期扫描这些不可达对象,并尝试清除它们。 #### 手动释放资源的方法 尽管 Python 提供了强大的自动化工具,但在处理大规模数据集或实时应用时,仍需注意以下几点: 1. **使用 `del` 删除变量** 显式地删除不再需要的对象可以通过 `del` 关键字完成。这将减少对该对象的引用次数,从而帮助更快触发内存释放操作[^2]。需要注意的是,`del` 只能移除名称绑定,实际的内存释放仍然取决于是否有其他地方保留着对同一对象的引用。 2. **强制执行垃圾收集** 如果希望更积极地控制何时进行垃圾回收,则可以调用模块级别的函数 `gc.collect()` 。此命令会让 GC 马上遍历所有代际集合寻找可丢弃项[^4]。不过要注意过度频繁地调用可能会带来性能开销。 3. **避免全局变量滥用** 全局范围内的大尺寸结构容易成为长期驻留在 RAM 中的原因之一。尽量把临时性的大数据存储限定在一个局部作用域内,这样一旦超出其生命周期就能迅速得到整理[^3]。 4. **利用上下文管理协议 (`with`)** 对那些实现了上下文管理接口(`__enter__`, `__exit__`) 的类来说,进入退出语句块期间所创建实例会在结束阶段自动关闭连接、清空缓冲区等动作,间接促进了相关联资源的有效归还[^5]. ```python import gc class ResourceHandler: def __init__(self, name): self.name = name def process(self): large_data_structure = [i for i in range(10**7)] # 创建一个很大的列表 def cleanup(self): del large_data_structure # 尝试提前释放内部成员变量的空间 print(f"{self.name} cleaned up.") def manage_resources(): handler = ResourceHandler('Example') try: handler.process() finally: handler.cleanup() if __name__ == "__main__": manage_resources() gc.collect() # 主动请求一次完整的垃圾搜集过程 ``` 上述代码展示了如何结合多种技术手段共同维护程序健康状态下的可用内存水平。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值