如何让内存工作集在Python 2.7 32位64位的过程?(How to get the memo

2019-10-17 22:56发布

一种用于自动测试框架我需要监视一个64位的处理,我开始的工作集。 不知怎的,我无法找到一个解决方案,允许监视超过4GB的数据更多。 我试图WMI和psutil,但两者都停留在32位的边界。 我做这样的事情:

import wmi
import psutil
import subprocess 

def measure_memory( process ):
    mem = psutil.Process( process.pid ).get_memory_info().rss
    return "%.2f M" % (float(mem)/1024./1024.)

def measure_memory_wmi( process ):
    w = wmi.WMI('.')
    result = w.query("SELECT WorkingSet FROM Win32_PerfRawData_PerfProc_Process WHERE IDProcess="+str(process.pid))
    subset = result[0]
    return "%.2f M" % (float(subset.WorkingSet)/1024./1024.)

process = subprocess.Popen( [path_to_program, '-option'] )
print measure_memory( process )
print measure_memory_wmi( process )

这提供了:

-0.00 M
4096.00 M

而进程资源管理器提供

6.806.976 K

有另一种方式来获得真实的数据?

谢谢!

Answer 1:

好吧,一些WMI工具/谷歌事故发生后,我发现了另一种方式来短语查询,提供正确的数字。 这是新的代码:

def measure_memory( process ):
    w = wmi.WMI('.')
    result = w.query("SELECT WorkingSetSize FROM Win32_Process WHERE ProcessID="+str(process.pid))
    print result
    subset = result[0]
    return "%.2f" % (float(subset.WorkingSetSize)/1024./1024.)

这似乎现在的工作。 任何人都可以证实,这应该比我更加的情况下现在的工作?



文章来源: How to get the memory working set of a 64bit process in python 2.7 32bit?