利用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代码做configure文件
Jul 20 Python
python实现斐波那契递归函数的方法
Sep 08 Python
Matplotlib中文乱码的3种解决方案
Nov 15 Python
Python遍历文件夹 处理json文件的方法
Jan 22 Python
对dataframe数据之间求补集的实例详解
Jan 30 Python
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
Jun 13 Python
python 字符串常用方法汇总详解
Sep 16 Python
tensorflow 模型权重导出实例
Jan 24 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
Feb 06 Python
windows下Pycharm安装opencv的多种方法
Mar 05 Python
Python调用JavaScript代码的方法
Oct 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 SQL之where语句生成器
2009/03/24 PHP
php 读取shell管道传输过来的内容
2010/03/01 PHP
基于PHP Socket配置以及实例的详细介绍
2013/06/13 PHP
PHP生成器简单实例
2015/05/13 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
Jquery 例外被抛出且未被接住原因介绍
2013/09/04 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
2016/06/07 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
Bootstrap treeview实现动态加载数据并添加快捷搜索功能
2018/01/07 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
Javascript的this详解
2019/03/23 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
Python和JavaScript间代码转换的4个工具
2016/02/22 Python
好的Python培训机构应该具备哪些条件
2018/05/23 Python
Django网络框架之创建虚拟开发环境操作示例
2019/06/06 Python
Python面向对象之Web静态服务器
2019/09/03 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
python中numpy.empty()函数实例讲解
2021/02/05 Python
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
项目副经理岗位职责
2013/12/30 职场文书
《大自然的语言》教学反思
2014/04/08 职场文书
完美的中文自荐信
2014/05/24 职场文书
大学新闻系应届生求职信
2014/06/02 职场文书
学校花圃的标语
2014/06/18 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书
奠基仪式致辞
2015/07/30 职场文书
设置IIS Express并发数
2022/07/07 Servers
LyScript实现绕过反调试保护的示例详解
2022/08/14 Python