利用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中if语句的嵌套用法
May 14 Python
Python简单连接MongoDB数据库的方法
Mar 15 Python
python数据结构之链表的实例讲解
Jul 25 Python
python如何查看微信消息撤回
Nov 27 Python
django 实现编写控制登录和访问权限控制的中间件方法
Jan 15 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
Feb 21 Python
Python列表与元组的异同详解
Jul 02 Python
Python中的self用法详解
Aug 06 Python
Python3 A*寻路算法实现方式
Dec 24 Python
sklearn+python:线性回归案例
Feb 24 Python
OpenCV灰度化之后图片为绿色的解决
Dec 01 Python
Python 数据分析之逐块读取文本的实现
Dec 14 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
windows下安装php的memcache模块的方法
2015/04/07 PHP
PHP中的流(streams)浅析
2015/07/02 PHP
THINKPHP在添加数据的时候获取主键id的值方法
2017/04/03 PHP
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
JQuery实现样式设置、追加、移除与切换的方法
2015/06/11 Javascript
JavaScript取得WEB安全颜色列表的方法
2015/07/14 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
jquery与js实现全选功能的区别
2017/06/11 jQuery
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
npm scripts 使用指南详解
2018/10/08 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
JS实现容器模块左右拖动效果
2020/01/14 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
Python中文字符串截取问题
2015/06/15 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
2019/09/16 Python
python flask中动态URL规则详解
2019/11/22 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
python 实现学生信息管理系统的示例
2020/11/28 Python
CSS3 二级导航菜单的制作的示例
2018/04/02 HTML / CSS
html5中的一些标签学习(心得)
2016/10/18 HTML / CSS
亚洲最大的运动鞋寄售店:KicksCrew
2020/11/26 全球购物
大学新闻系求职信
2014/06/03 职场文书
保护环境标语
2014/06/09 职场文书
销售顾问工作计划书
2014/09/15 职场文书