如何获取外部程序的内存使用量-python

2024-05-29 03:27:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python脚本中获取外部程序的内存使用情况。我试着使用脚本http://code.activestate.com/recipes/286222/如下:

m0 = memory()
subprocess.call('My program')
m1 = memory(m0)
print m1

但这似乎只是给了我python脚本的内存使用量,而不是“我的程序”。有没有一种方法可以输出程序的内存使用情况,以便在python脚本中使用?


Tags: 内存程序脚本comhttpmy情况code
3条回答

您可能需要签出psutil模块:http://code.google.com/p/psutil/。主页上的“进程管理”部分提供了获取由pid指定的正在运行的进程的内存使用情况的示例。

是否也要在脚本中生成正在监视的进程?如果是,您可能不想使用subprocess.call,因为这将等待程序退出,并且您将无法在程序运行时监视它。如果要生成进程并监视它,可能需要使用Popenhttp://docs.python.org/library/subprocess.html#subprocess.Popen。这将允许您生成进程,获取pid,将pid交给psutil,然后监视内存使用情况。

尝试使用Psutil

import psutil
import subprocess
import time

SLICE_IN_SECONDS = 1
p = subprocess.Popen('calling/your/program')
resultTable = []
while p.poll() == None:
  resultTable.append(psutil.get_memory_info(p.pid))
  time.sleep(SLICE_IN_SECONDS)

如果你看菜谱,你会看到一行:

_proc_status = '/proc/%d/status' % os.getpid()

我建议您用子进程的进程id替换os.getpid()。正如@Neal所说,当我输入这个时,您需要使用Popen并获取返回对象的pid属性。

但是,您有一个可能的竞争条件,因为您不知道子进程处于什么状态,并且内存使用量无论如何都会有所不同。

相关问题 更多 >

    热门问题