利用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文件操作之目录遍历实例分析
May 20 Python
使用python加密自己的密码
Aug 04 Python
Python单链表简单实现代码
Apr 27 Python
python 函数内部修改外部变量的方法
Dec 18 Python
pycharm 将python文件打包为exe格式的方法
Jan 16 Python
python3+PyQt5 数据库编程--增删改实例
Jun 17 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
常用的10个Python实用小技巧
Aug 10 Python
浅析Python 责任链设计模式
Sep 11 Python
Python爬虫实现selenium处理iframe作用域问题
Jan 27 Python
python解包用法详解
Feb 17 Python
Python编程编写完善的命令行工具
Sep 15 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中使用Oracle数据库(3)
2006/10/09 PHP
php中使用cookie来保存用户登录信息的实现代码
2012/03/08 PHP
php实现图片缩放功能类
2013/12/18 PHP
php的array数组和使用实例简明教程(容易理解)
2014/03/20 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
XP折叠菜单&仿QQ2006菜单
2006/12/16 Javascript
js 获取浏览器高度和宽度值(多浏览器)
2009/09/02 Javascript
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
js鼠标滑过弹出层的定位IE6bug解决办法
2012/12/26 Javascript
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
jQuery中wrapAll()方法用法实例
2015/01/16 Javascript
Eclipse引入jquery报错如何解决
2015/12/01 Javascript
jQuery事件绑定on()与弹窗实现代码
2016/04/28 Javascript
Angular项目中$scope.$apply()方法的使用详解
2017/07/26 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
详解小程序rich-text对富文本支持方案
2018/11/28 Javascript
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
[03:17]史诗级大片应援2018DOTA2国际邀请赛 致敬每一位坚守遗迹的勇士
2018/07/20 DOTA
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2014/06/10 Python
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
Python工程师面试题 与Python Web相关
2016/01/14 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
Python使用matplotlib绘制三维参数曲线操作示例
2019/09/10 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
pycharm-professional-2020.1下载与激活的教程
2020/09/21 Python
基于HTML5 的人脸识别活体认证的实现方法
2016/06/22 HTML / CSS
delegate与普通函数的区别
2014/01/22 面试题
生物专业个人自荐信范文
2013/11/29 职场文书
关于旷工的检讨书
2014/02/02 职场文书
法制宣传月活动总结
2014/04/29 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
2014年党支部学习材料
2014/05/19 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
创业计划书之餐饮
2019/09/02 职场文书
python for循环赋值问题
2021/06/03 Python