zoukankan      html  css  js  c++  java
  • 通过ctypes获得python windows process的内存使用情况

    通过ctypes 类库中的win32方法GetProcessMemoryInfo()获得当前进程的内存使用情况。该函数可以在32或者64位,python2.6+及python3.x之上都能有用。

    """Functions for getting memory usage of Windows processes."""
    
    __all__ = ['get_current_process', 'get_memory_info', 'get_memory_usage']
    
    import ctypes
    from ctypes import wintypes
    
    GetCurrentProcess = ctypes.windll.kernel32.GetCurrentProcess
    GetCurrentProcess.argtypes = []
    GetCurrentProcess.restype = wintypes.HANDLE
    
    SIZE_T = ctypes.c_size_t
    
    class PROCESS_MEMORY_COUNTERS_EX(ctypes.Structure):
        _fields_ = [
            ('cb', wintypes.DWORD),
            ('PageFaultCount', wintypes.DWORD),
            ('PeakWorkingSetSize', SIZE_T),
            ('WorkingSetSize', SIZE_T),
            ('QuotaPeakPagedPoolUsage', SIZE_T),
            ('QuotaPagedPoolUsage', SIZE_T),
            ('QuotaPeakNonPagedPoolUsage', SIZE_T),
            ('QuotaNonPagedPoolUsage', SIZE_T),
            ('PagefileUsage', SIZE_T),
            ('PeakPagefileUsage', SIZE_T),
            ('PrivateUsage', SIZE_T),
        ]
    
    GetProcessMemoryInfo = ctypes.windll.psapi.GetProcessMemoryInfo
    GetProcessMemoryInfo.argtypes = [
        wintypes.HANDLE,
        ctypes.POINTER(PROCESS_MEMORY_COUNTERS_EX),
        wintypes.DWORD,
    ]
    GetProcessMemoryInfo.restype = wintypes.BOOL
    
    def get_current_process():
        """Return handle to current process."""
        return GetCurrentProcess()
    
    def get_memory_info(process=None):
        """Return Win32 process memory counters structure as a dict."""
        if process is None:
            process = get_current_process()
        counters = PROCESS_MEMORY_COUNTERS_EX()
        ret = GetProcessMemoryInfo(process, ctypes.byref(counters),
                                   ctypes.sizeof(counters))
        if not ret:
            raise ctypes.WinError()
        info = dict((name, getattr(counters, name))
                    for name, _ in counters._fields_)
        return info
    
    def get_memory_usage(process=None):
        """Return this process's memory usage in bytes."""
        info = get_memory_info(process=process)
        return info['PrivateUsage']
    
    if __name__ == '__main__':
        import pprint
        pprint.pprint(get_memory_info())
  • 相关阅读:
    node设置跨域白名单
    vueInitVux中引入bootstrap、jquery步骤
    npm命令集合
    css横屏问题的设置
    verdaccio启动命令
    拖拽上传文件在火狐中会打开新窗口
    vue监听input输入框限制输入长度
    axios get请求传递参数 es6语法
    export default和export的使用
    webpack中如何使用vue
  • 原文地址:https://www.cnblogs.com/ankier/p/3239200.html
Copyright © 2011-2022 走看看