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中的子进程内存使用情况相关推荐

  1. linux监测cpu 内存,Linux中CPU与内存性能监测.docx

    Linux中CPU与内存性能监测(出处://chenleixing/article/details 在系统维护的过程中,随时可能有需要查看 CPU 使用率内存使用情况的需要,尤其是涉及到JVM,程序调 ...

  2. linux交换内存_Linux中的交换内存如何工作?

    linux交换内存 To understand what Swap memory in Linux is, we will have a look at the concept of RAM and ...

  3. java 数组 内存_Java 中数组的内存分配

    Java 中数组的内存分配 1.Java 程序在运行时,需要在内存中分配空间.为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据和内存管理方式. 2.数组基本概念 数组是 ...

  4. Linux谁访问这个内存,Linux中的直接内存访问

    我正在尝试直接访问嵌入式Linux项目的物理内存,但我不确定如何最好地为我的内容指定内存. 如果我定期启动我的设备,并访问/ dev/mem,我可以轻松地读取和写入我想要的任何地方.但是,在这里,我正 ...

  5. android surfaceflinger内存,surfaceflinger中的显示内存管理类

    1.  Android中的应用层每申请一个Surface,最终会通过jni和binder调用到surfaceflinger中,最终会创建一个Layerxxx(Layer,LayerBuffer,Lay ...

  6. 【Android 内存优化】垃圾回收算法 ( 内存优化总结 | 常见的内存泄漏场景 | GC 算法 | 标记清除算法 | 复制算法 | 标记压缩算法 )

    文章目录 一. 内存优化总结 二. 常见的内存泄漏场景 三. 内存回收算法 四. 标记-清除算法 ( mark-sweep ) 五. 复制算法 六. 标记-压缩算法 一. 内存优化总结 内存泄漏原理 ...

  7. 内存参数 计算_Spark统一内存管理的实现

    本文从源码角度分析spark统一内存管理的实现原理. 统一内存管理对象的创建 统一内存管理对象在SparkEnv中进行创建和管理,这样内存管理就在Driver和Executor端中都可以使用.在Spa ...

  8. qt内存泄漏检测_qt 关于内存泄漏的检测

    Qt 关于内存泄露的检测: 工具篇关于Qt 内存泄露的检测工具有很多种,一下挑几种来说: 1.检测已分配资源, 第一个工具是一个内存资源使用的监听器.它只能在模拟器上进行调试.可以使用快捷键来调用 按 ...

  9. C++ 内存池介绍与经典内存池的实现

    代码编译运行环境:VS2012+Debug+Win32 文章目录 1.默认内存管理函数的不足 2.内存池简介 2.1 内存池的定义 2.2 内存池的优点 2.3 内存池的分类 3.经典的内存池技术 3 ...

  10. linux内存回收(二)--直接内存回收机制

    上一章,我们学习了kswapd的内存回收的机制,其本身是一个内核线程,它和调用者的关系是异步的,那么本章就开始学习内核的内存回收的方式.因为在不同的内存分配路径中,会触发不同的内存回收方式,内存回收针 ...

最新文章

  1. 自然语言处理(NLP)之从文本中提取时间
  2. 0xde c语言合法常量_【期初优课堂】2020“云课堂”开讲啦!第3期(C语言)
  3. c++ 不允许使用不完整的类型_Python入门高级教程--Python?变量类型
  4. 初识docker,弄清镜像和容器
  5. hpsocket java代码_HPSocket介绍与使用
  6. mysql子查询查询子字段_MySQL知识整理7.4—子查询
  7. python函数控制词典_Python 基础之集合相关操作与函数和字典相关函数
  8. 做web开发需要学习哪些技术--基础篇
  9. Linux递归统计当前目录下普通文件的数量
  10. 基于matlab的微分例题,matlab程序设计常微分方程编程例题答案数学.doc
  11. HHL论文第二弹(基本过程)
  12. 关于Google您的连接不是私密连接问题的解决方法 (Chrome 地址栏 Google 搜索错误处理 隐私设置错误)
  13. 动态html函数的写法,如何将html div id的动态传递给js函数
  14. 为什么墨刀的动效这么酷炫?学会神奇移动,你也可以
  15. overcommit_memory=1是否可以改善服务器内存不足的情况
  16. 商品评价实体情感识别项目
  17. 第四篇 HTML5 伪类与伪元素
  18. 一首洗脱人们灵魂最深处的完美音符
  19. java 有没有类似于 requests 爬虫_广州地震?用 Python 爬虫带你了解地震
  20. 微软推补丁服务器,微软正式推补丁强制删除Flash!教你完美应对

热门文章

  1. 形态数轴的非递进现象
  2. leetcode103JAVA_[LeetCode] 103. Binary Tree Zigzag Level Order Traversal Java
  3. 【UWB】ELM 极限学习机原理及公式推导
  4. STM32 进阶教程 15 - 串口DMA收发
  5. Android4.1 触摸屏(TP)划线曲折、不圆润的解决办法
  6. 使用Android内部的DownloadProvider下载文件,并获取cache权限 .
  7. 【DIY】可能是最简单便宜的DIY温湿度计,arduino温湿度计
  8. 基于linux的nas系统下载,OpenMediaVault 5.3.9 发布,基于Debian Linux的NAS解决方案
  9. 【RFID】基于MATLAB的RFID 系统的空中接口过程以及防碰撞算法仿真
  10. STM32硬件错误(HardFault_Handler)位置判断