利用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代码检查工具pylint 让你的python更规范
Sep 05 Python
在Python的Django框架中创建语言文件
Jul 27 Python
浅谈终端直接执行py文件,不需要python命令
Jan 23 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
Mar 16 Python
Python中Selenium模拟JQuery滑动解锁实例
Jul 26 Python
git进行版本控制心得详谈
Dec 10 Python
Python AES加密实例解析
Jan 18 Python
Python 创建空的list,以及append用法讲解
May 04 Python
Python面向对象程序设计之继承与多继承用法分析
Jul 13 Python
python实现网站用户名密码自动登录功能
Aug 09 Python
Django权限控制的使用
Jan 07 Python
Python爬虫:从m3u8文件里提取小视频的正确操作
May 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
新版PHP将向Java靠拢
2006/10/09 PHP
php 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
PHP 金额数字转换成英文
2010/05/06 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
js汉字转拼音实现代码
2013/02/06 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
2013/07/09 Javascript
Javascript中匿名函数的多种调用方式总结
2013/12/06 Javascript
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
Ionic快速安装教程
2016/06/03 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
Angular Excel 导入与导出的实现代码
2019/04/17 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
js实现数字跳动到指定数字
2020/08/25 Javascript
vue使用openlayers实现移动点动画
2020/09/24 Javascript
Python采集腾讯新闻实例
2014/07/10 Python
python递归删除指定目录及其所有内容的方法
2017/01/13 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
python中with用法讲解
2020/02/07 Python
解决Python pip 自动更新升级失败的问题
2020/02/21 Python
python中time.ctime()实例用法
2021/02/03 Python
纯CSS3大转盘抽奖示例代码(响应式、可配置)
2017/01/13 HTML / CSS
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
工程师岗位职责
2013/11/08 职场文书
学习十八大演讲稿
2014/09/15 职场文书
离婚协议书范本2014
2014/10/27 职场文书
采购内勤岗位职责
2015/04/13 职场文书
变长双向rnn的正确使用姿势教学
2021/05/31 Python
HTML常用标签超详细整理
2022/03/19 HTML / CSS
以下牛机,你有几个
2022/04/05 无线电
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript