利用Python如何实时检测自身内存占用


Posted in Python onMay 09, 2020

前言

最近在做文本统计,用 Python 实现,遇到了一个比较有意思的难题——如何保存统计结果。

直接写入内存实在是放不下,十几个小时后内存耗尽,程序被迫关闭。如果直接写入数据库吧,每次写入又太慢了,本来就十几个小时了,这样下去就要往星期上数了,也不是个办法。

解决方案

最后,我想到了一个两者兼顾的方案——用内存做缓冲,达到一定量之后一次性将当前所有数据合并到硬盘里。

但这样就有一个阈值,如何确定同步硬盘的时机,通常可以按照文件粒度进行处理,比如处理一个语料文件同步一次……但我的语料有大有小,大的有10GB,根本等不到那一刻内存就爆炸了,后来我想用统计数据量进行判断……可这又有点难以估计,小了吧频繁写入,缓存的意义就不大了,大了吧还没等到条目数量达到,内存就已经爆满。另外考虑到将来程序会运行在不同配置的设备上,让其他开发者根据自身情况计算这个阈值也有点太不友好,于是我想到了一个办法——不如让 Python 自己检测自己的内存占用,如果快满了(或者达到阈值),就同步写入硬盘一次。

对于其他开发者来说,自身设备的内存多大是很容易查看的,根据系统运行状况设置一个合理的阈值,相当方便。

要用 Python 监控自身内存占用,要使用 psutil 这个库来和系统进行交互,基本逻辑就是先拿到自己的 pid ,然后根据这个 pid 去跟系统获取进程信息。

def get_current_memory_gb() -> int:
# 获取当前进程内存占用。
pid = os.getpid()
p = psutil.Process(pid)
info = p.memory_full_info()
return info.uss / 1024. / 1024. / 1024.

比如我系统是 32GB 内存,那么我设置个 20GB 就相当安全,用 Python 进行统计语料,数据多到进程占用 20GB 内存了,就把当前的数据写入硬盘,同步统计数据,然后清空程序里的字典缓存释放内存。

python之psutil

psutil是个跨平台库,能够轻松实现获取系统运行的进程和系统利用率,包括CPU、内存、磁盘、网络等信息。

Linux系统下的安装

pip install psutil

总结

到此这篇关于利用Python如何实时检测自身内存占用的文章就介绍到这了,更多相关Python实时检测自身内存占用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中的模块和包概念介绍
Apr 13 Python
Python探索之爬取电商售卖信息代码示例
Oct 27 Python
python 处理string到hex脚本的方法
Oct 26 Python
浅析Python与Mongodb数据库之间的操作方法
Jul 01 Python
Python OpenCV 使用滑动条来调整函数参数的方法
Jul 08 Python
python集合常见运算案例解析
Oct 17 Python
Python跑循环时内存泄露的解决方法
Jan 13 Python
解决Python logging模块无法正常输出日志的问题
Feb 21 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
Apr 20 Python
python argparse模块通过后台传递参数实例
Apr 20 Python
python缩进长度是否统一
Aug 02 Python
Python使用PyYAML库读写yaml文件的方法
Apr 06 Python
如何通过Python3和ssl实现加密通信功能
May 09 #Python
详解Django配置JWT认证方式
May 09 #Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
May 08 #Python
win10从零安装配置pytorch全过程图文详解
May 08 #Python
Python reduce函数作用及实例解析
May 08 #Python
Python使用sqlite3模块内置数据库
May 07 #Python
Python打印特殊符号及对应编码解析
May 07 #Python
You might like
解析thinkphp中的导入文件标签
2013/06/20 PHP
PHP使用HTML5 FormData对象提交表单操作示例
2019/07/02 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
2020/03/18 PHP
动态为事件添加js代码示例
2009/02/15 Javascript
javascript 最常用的10个自定义函数[推荐]
2009/12/26 Javascript
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
js正文内容高亮效果的实现方法
2013/06/30 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
javascript动态修改Li节点值的方法
2015/01/20 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
记一次vue去除#问题处理经过小结
2019/01/24 Javascript
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
Python实现的读写json文件功能示例
2018/06/05 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
python获取地震信息 微信实时推送
2019/06/18 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
利用python画出AUC曲线的实例
2020/02/28 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
Python通过len函数返回对象长度
2020/10/22 Python
解决Pycharm 运行后没有输出的问题
2021/02/05 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
Ben Sherman官方网站:英国男装品牌
2019/10/22 全球购物
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
介绍一下grep命令的使用
2012/06/28 面试题
保护野生动物倡议书
2014/05/16 职场文书
空气环保标语
2014/06/12 职场文书
员工工作心得体会
2019/05/07 职场文书
Smart 2 车辆代号 HC11 全新谍照曝光
2022/04/21 数码科技
MySQL普通表如何转换成分区表
2022/05/30 MySQL