利用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运用于数据分析的简单教程
Mar 27 Python
pymongo实现多结果进行多列排序的方法
May 16 Python
一百行python代码将图片转成字符画
Feb 19 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
Dec 19 Python
Python XlsxWriter模块Chart类用法实例分析
Mar 11 Python
Django自带日志 settings.py文件配置方法
Aug 30 Python
python入门:argparse浅析 nargs='+'作用
Jul 12 Python
django跳转页面传参的实现
Sep 17 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
新手必备Python开发环境搭建教程
May 28 Python
Python道路车道线检测的实现
Jun 27 Python
Python实现Excel文件的合并(以新冠疫情数据为例)
Mar 20 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
人工智能开始玩《星际争霸2》 你的操作跟得上吗?
2017/08/11 星际争霸
php下实现伪 url 的超简单方法[转]
2007/09/24 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
Yii2实现ActiveForm ajax提交
2017/05/26 PHP
PHP新特性之字节码缓存和内置服务器
2017/08/11 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
PHP文件操作简单介绍及函数汇总
2020/12/11 PHP
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
js控制的遮罩层实例介绍
2013/05/29 Javascript
JS嵌套函数调用上下文的问题解决
2014/03/26 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
python Crypto模块的安装与使用方法
2017/12/21 Python
Java Spring项目国际化(i18n)详细方法与实例
2020/03/20 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
Python plt 利用subplot 实现在一张画布同时画多张图
2021/02/26 Python
Footshop乌克兰:运动鞋的最大选择
2019/12/01 全球购物
香港士多网上超级市场:Ztore
2021/01/09 全球购物
餐饮加盟计划书
2014/01/10 职场文书
百货商场楼层班组长竞聘书
2014/03/31 职场文书
《海底世界》教学反思
2014/04/16 职场文书
节能减耗标语
2014/06/21 职场文书
2015毕业生实习工作总结
2014/12/12 职场文书
怎样写离婚协议书
2015/01/26 职场文书
民事调解书范文
2015/05/20 职场文书
女性健康讲座主持词
2015/07/04 职场文书
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
2021/04/12 Python
Python实现滑雪小游戏
2021/09/25 Python