利用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冒泡排序简单实现方法
Jul 09 Python
python学习教程之使用py2exe打包
Sep 24 Python
python 上下文管理器使用方法小结
Oct 10 Python
快速了解Python开发中的cookie及简单代码示例
Jan 17 Python
解决python3爬虫无法显示中文的问题
Apr 12 Python
python 多线程将大文件分开下载后在合并的实例
Nov 09 Python
Django 中间键和上下文处理器的使用
Mar 17 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
May 06 Python
python实现串口自动触发工作的示例
Jul 02 Python
Python制作微信好友背景墙教程(附完整代码)
Jul 17 Python
使用Windows批处理和WMI设置Python的环境变量方法
Aug 14 Python
聊聊python在linux下与windows下导入模块的区别说明
Mar 03 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
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
php4的session功能评述(二)
2006/10/09 PHP
说明的比较细的php 正则学习实例
2008/07/30 PHP
php反弹shell实现代码
2009/04/22 PHP
PHP模块化安装教程
2016/06/01 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
JS图片无缝、平滑滚动代码
2014/03/11 Javascript
快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
2016/04/15 Javascript
数据结构中的各种排序方法小结(JS实现)
2016/07/23 Javascript
javascript鼠标滑过显示二级菜单特效
2020/11/18 Javascript
Vue实现购物车功能
2017/04/27 Javascript
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
layui的table中显示图片方法
2018/08/17 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
vue实现选中效果
2020/10/07 Javascript
Python在线运行代码助手
2016/07/15 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
对Python3中列表乘以某一个数的示例详解
2019/07/20 Python
通过python连接Linux命令行代码实例
2020/02/18 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
使用canvas压缩图片大小的方法示例
2019/08/02 HTML / CSS
.NET面试问题集
2015/12/08 面试题
跟单文员岗位职责
2014/01/03 职场文书
致短跑运动员广播稿
2014/01/09 职场文书
网上开店必备创业计划书
2014/01/26 职场文书
青年志愿者事迹材料
2014/02/07 职场文书
公司离职证明标准样本
2014/10/05 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
2016年春季运动会加油稿
2015/07/22 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python