利用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实现挑选出来100以内的质数
Mar 24 Python
Python实现获取磁盘剩余空间的2种方法
Jun 07 Python
Python连接phoenix的方法示例
Sep 29 Python
Python 查看文件的编码格式方法
Dec 21 Python
Python操作MySQL数据库的方法
Jun 20 Python
Python实现定时自动关闭的tkinter窗口方法
Feb 16 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
May 13 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
Jun 24 Python
Django文件存储 自己定制存储系统解析
Aug 02 Python
Python散点图与折线图绘制过程解析
Nov 30 Python
简述python Scrapy框架
Aug 17 Python
基于Python采集爬取微信公众号历史数据
Nov 27 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
php中利用post传递字符串重定向的实现代码
2011/04/21 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
php执行多个存储过程的方法【基于thinkPHP】
2016/11/08 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
javascript实现unicode与ASCII相互转换的方法
2015/12/10 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
JS文件上传神器bootstrap fileinput详解
2021/01/28 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
2017/12/19 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
js实现页面图片消除效果
2020/03/24 Javascript
python Django连接MySQL数据库做增删改查
2013/11/07 Python
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
Python实现的读取电脑硬件信息功能示例
2018/05/30 Python
python如何查看微信消息撤回
2018/11/27 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
python SVM 线性分类模型的实现
2019/07/19 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
如何在Python3中使用telnetlib模块连接网络设备
2020/09/21 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码
2018/05/28 HTML / CSS
开发人员所需要知道的HTML5性能分析面面观
2012/07/05 HTML / CSS
HTML5中div、article、section的区别及使用介绍
2013/08/14 HTML / CSS
环境科学毕业生自荐信
2013/11/21 职场文书
有趣的广告词
2014/03/18 职场文书
雨雪天气温馨提示
2015/07/15 职场文书
聘任通知书
2015/09/21 职场文书
2016教师节感恩话语
2015/12/09 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
openstack中的rpc远程调用的方法
2021/07/09 Python