利用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分割和拼接字符串
Nov 01 Python
Python中解析JSON并同时进行自定义编码处理实例
Feb 08 Python
Python实现的选择排序算法示例
Nov 29 Python
教你用Python创建微信聊天机器人
Mar 31 Python
tensorflow 1.0用CNN进行图像分类
Apr 15 Python
python解决js文件utf-8编码乱码问题(推荐)
May 02 Python
pyqt5、qtdesigner安装和环境设置教程
Sep 25 Python
解决python web项目意外关闭,但占用端口的问题
Dec 17 Python
Python如何使用paramiko模块连接linux
Mar 18 Python
python golang中grpc 使用示例代码详解
Jun 03 Python
用python实现一个简单计算器(完整DEMO)
Oct 14 Python
如何用Matlab和Python读取Netcdf文件
Feb 19 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自动加载的两种实现方法
2010/06/21 PHP
PHP中使用CURL伪造来路抓取页面或文件
2011/05/04 PHP
PHP内核探索之变量
2015/12/22 PHP
Laravel手动分页实现方法详解
2016/10/09 PHP
PHP进程通信基础之信号
2017/02/19 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
jquery随意添加移除html的实现代码
2011/06/21 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
javascript动态向网页中添加表格实现代码
2014/02/19 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
2015/12/31 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
Nodejs抓取html页面内容(推荐)
2016/08/11 NodeJs
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
jquery中用函数来设置css样式
2016/12/22 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
解决vue打包 npm run build-test突然不动了的问题
2020/11/13 Javascript
Vue实现boradcast和dispatch的示例
2020/11/13 Javascript
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
Python编程中归并排序算法的实现步骤详解
2016/05/04 Python
python开发简易版在线音乐播放器
2017/03/03 Python
Python双精度浮点数运算并分行显示操作示例
2017/07/21 Python
python实现回旋矩阵方式(旋转矩阵)
2019/12/04 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
html5跨域通讯之postMessage的用法总结
2013/11/07 HTML / CSS
资产经营总监岗位职责
2013/12/04 职场文书
户外婚礼策划方案
2014/02/08 职场文书
创业女性典型材料
2014/05/02 职场文书
2014年社区卫生工作总结
2014/12/18 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
答谢酒会主持词
2015/07/02 职场文书
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python
python自动化调用百度api解决验证码
2021/04/13 Python
vue如何清除浏览器历史栈
2022/05/25 Vue.js