利用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实现树莓派WiFi断线自动重连的实例代码
Mar 16 Python
python 生成器生成杨辉三角的方法(必看)
Apr 10 Python
快速了解Python相对导入
Jan 12 Python
Django rest framework实现分页的示例
May 24 Python
Python运维之获取系统CPU信息的实现方法
Jun 11 Python
django连接mysql配置方法总结(推荐)
Aug 18 Python
python版本单链表实现代码
Sep 28 Python
Python求离散序列导数的示例
Jul 10 Python
如何使用Flask-Migrate拓展数据库表结构
Jul 24 Python
通过python调用adb命令对App进行性能测试方式
Apr 23 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
Dec 03 Python
PyTorch中的torch.cat简单介绍
Mar 17 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
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
php实现的zip文件内容比较类
2014/09/24 PHP
Java中final关键字详解
2015/08/10 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
php+jQuery递归调用POST循环请求示例
2016/10/14 PHP
extjs ColumnChart设置不同的颜色实现代码
2013/05/17 Javascript
jquery实现metro效果示例代码
2013/09/06 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
JavaScript中的splice()方法使用详解
2015/06/09 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
JavaScript中十种一步拷贝数组的方法实例详解
2019/04/22 Javascript
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
Python httplib模块使用实例
2015/04/11 Python
python微信跳一跳游戏辅助代码解析
2018/01/29 Python
Python扩展内置类型详解
2018/03/26 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
Django之提交表单与前后端交互的方法
2019/07/19 Python
Python telnet登陆功能实现代码
2020/04/16 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
vscode调试django项目的方法
2020/08/06 Python
浅析Python的命名空间与作用域
2020/11/25 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
英国健康和美容技术产品购物网站:CurrentBody
2019/07/17 全球购物
公司综合部的成员自我评价分享
2013/11/05 职场文书
编辑硕士自荐信范文
2013/11/27 职场文书
给同事的道歉信
2014/01/11 职场文书
即将毕业大学生自荐信
2014/01/24 职场文书
2015入党个人自传范文
2015/06/26 职场文书
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis