python子进程 内存,python中的子进程内存使用情况
How can one measure/benchmark maximum memory usage of a subprocess executed within python?
解决方案
I made a little utility class that demonstrates how to do this with the psutil library:
import psutil
import subprocess
class ProcessTimer:
def __init__(self,command):
self.command = command
self.execution_state = False
def execute(self):
self.max_vms_memory = 0
self.max_rss_memory = 0
self.t1 = None
self.t0 = time.time()
self.p = subprocess.Popen(self.command,shell=False)
self.execution_state = True
def poll(self):
if not self.check_execution_state():
return False
self.t1 = time.time()
try:
pp = psutil.Process(self.p.pid)
#obtain a list of the subprocess and all its descendants
descendants = list(pp.get_children(recursive=True))
descendants = descendants + [pp]
rss_memory = 0
vms_memory = 0
#calculate and sum up the memory of the subprocess and all its descendants
for descendant in descendants:
try:
mem_info = descendant.get_memory_info()
rss_memory += mem_info[0]
vms_memory += mem_info[1]
except psutil.error.NoSuchProcess:
#sometimes a subprocess descendant will have terminated between the time
# we obtain a list of descendants, and the time we actually poll this
# descendant's memory usage.
pass
self.max_vms_memory = max(self.max_vms_memory,vms_memory)
self.max_rss_memory = max(self.max_rss_memory,rss_memory)
except psutil.error.NoSuchProcess:
return self.check_execution_state()
return self.check_execution_state()
def is_running(self):
return psutil.pid_exists(self.p.pid) and self.p.poll() == None
def check_execution_state(self):
if not self.execution_state:
return False
if self.is_running():
return True
self.executation_state = False
self.t1 = time.time()
return False
def close(self,kill=False):
try:
pp = psutil.Process(self.p.pid)
if kill:
pp.kill()
else:
pp.terminate()
except psutil.error.NoSuchProcess:
pass
You then use it like so:
import time
#I am executing "make target" here
ptimer = ProcessTimer(['make','target'])
try:
ptimer.execute()
#poll as often as possible; otherwise the subprocess might
# "sneak" in some extra memory usage while you aren't looking
while ptimer.poll():
time.sleep(.5)
finally:
#make sure that we don't leave the process dangling?
ptimer.close()
print 'return code:',ptimer.p.returncode
print 'time:',ptimer.t1 - ptimer.t0
print 'max_vms_memory:',ptimer.max_vms_memory
print 'max_rss_memory:',ptimer.max_rss_memory
python子进程 内存,python中的子进程内存使用情况相关推荐
- linux监测cpu 内存,Linux中CPU与内存性能监测.docx
Linux中CPU与内存性能监测(出处://chenleixing/article/details 在系统维护的过程中,随时可能有需要查看 CPU 使用率内存使用情况的需要,尤其是涉及到JVM,程序调 ...
- linux交换内存_Linux中的交换内存如何工作?
linux交换内存 To understand what Swap memory in Linux is, we will have a look at the concept of RAM and ...
- java 数组 内存_Java 中数组的内存分配
Java 中数组的内存分配 1.Java 程序在运行时,需要在内存中分配空间.为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据和内存管理方式. 2.数组基本概念 数组是 ...
- Linux谁访问这个内存,Linux中的直接内存访问
我正在尝试直接访问嵌入式Linux项目的物理内存,但我不确定如何最好地为我的内容指定内存. 如果我定期启动我的设备,并访问/ dev/mem,我可以轻松地读取和写入我想要的任何地方.但是,在这里,我正 ...
- android surfaceflinger内存,surfaceflinger中的显示内存管理类
1. Android中的应用层每申请一个Surface,最终会通过jni和binder调用到surfaceflinger中,最终会创建一个Layerxxx(Layer,LayerBuffer,Lay ...
- 【Android 内存优化】垃圾回收算法 ( 内存优化总结 | 常见的内存泄漏场景 | GC 算法 | 标记清除算法 | 复制算法 | 标记压缩算法 )
文章目录 一. 内存优化总结 二. 常见的内存泄漏场景 三. 内存回收算法 四. 标记-清除算法 ( mark-sweep ) 五. 复制算法 六. 标记-压缩算法 一. 内存优化总结 内存泄漏原理 ...
- 内存参数 计算_Spark统一内存管理的实现
本文从源码角度分析spark统一内存管理的实现原理. 统一内存管理对象的创建 统一内存管理对象在SparkEnv中进行创建和管理,这样内存管理就在Driver和Executor端中都可以使用.在Spa ...
- qt内存泄漏检测_qt 关于内存泄漏的检测
Qt 关于内存泄露的检测: 工具篇关于Qt 内存泄露的检测工具有很多种,一下挑几种来说: 1.检测已分配资源, 第一个工具是一个内存资源使用的监听器.它只能在模拟器上进行调试.可以使用快捷键来调用 按 ...
- C++ 内存池介绍与经典内存池的实现
代码编译运行环境:VS2012+Debug+Win32 文章目录 1.默认内存管理函数的不足 2.内存池简介 2.1 内存池的定义 2.2 内存池的优点 2.3 内存池的分类 3.经典的内存池技术 3 ...
- linux内存回收(二)--直接内存回收机制
上一章,我们学习了kswapd的内存回收的机制,其本身是一个内核线程,它和调用者的关系是异步的,那么本章就开始学习内核的内存回收的方式.因为在不同的内存分配路径中,会触发不同的内存回收方式,内存回收针 ...
最新文章
- 自然语言处理(NLP)之从文本中提取时间
- 0xde c语言合法常量_【期初优课堂】2020“云课堂”开讲啦!第3期(C语言)
- c++ 不允许使用不完整的类型_Python入门高级教程--Python?变量类型
- 初识docker,弄清镜像和容器
- hpsocket java代码_HPSocket介绍与使用
- mysql子查询查询子字段_MySQL知识整理7.4—子查询
- python函数控制词典_Python 基础之集合相关操作与函数和字典相关函数
- 做web开发需要学习哪些技术--基础篇
- Linux递归统计当前目录下普通文件的数量
- 基于matlab的微分例题,matlab程序设计常微分方程编程例题答案数学.doc
- HHL论文第二弹(基本过程)
- 关于Google您的连接不是私密连接问题的解决方法 (Chrome 地址栏 Google 搜索错误处理 隐私设置错误)
- 动态html函数的写法,如何将html div id的动态传递给js函数
- 为什么墨刀的动效这么酷炫?学会神奇移动,你也可以
- overcommit_memory=1是否可以改善服务器内存不足的情况
- 商品评价实体情感识别项目
- 第四篇 HTML5 伪类与伪元素
- 一首洗脱人们灵魂最深处的完美音符
- java 有没有类似于 requests 爬虫_广州地震?用 Python 爬虫带你了解地震
- 微软推补丁服务器,微软正式推补丁强制删除Flash!教你完美应对
热门文章
- 形态数轴的非递进现象
- leetcode103JAVA_[LeetCode] 103. Binary Tree Zigzag Level Order Traversal Java
- 【UWB】ELM 极限学习机原理及公式推导
- STM32 进阶教程 15 - 串口DMA收发
- Android4.1 触摸屏(TP)划线曲折、不圆润的解决办法
- 使用Android内部的DownloadProvider下载文件,并获取cache权限 .
- 【DIY】可能是最简单便宜的DIY温湿度计,arduino温湿度计
- 基于linux的nas系统下载,OpenMediaVault 5.3.9 发布,基于Debian Linux的NAS解决方案
- 【RFID】基于MATLAB的RFID 系统的空中接口过程以及防碰撞算法仿真
- STM32硬件错误(HardFault_Handler)位置判断