Total memory used by Python process?

前端 未结 12 690
眼角桃花
眼角桃花 2020-11-22 04:28

Is there a way for a Python program to determine how much memory it\'s currently using? I\'ve seen discussions about memory usage for a single object, but what I need is tot

12条回答
  •  伪装坚强ぢ
    2020-11-22 04:37

    On Windows, you can use WMI (home page, cheeseshop):

    
    def memory():
        import os
        from wmi import WMI
        w = WMI('.')
        result = w.query("SELECT WorkingSet FROM Win32_PerfRawData_PerfProc_Process WHERE IDProcess=%d" % os.getpid())
        return int(result[0].WorkingSet)
    

    On Linux (from python cookbook http://code.activestate.com/recipes/286222/:

    import os
    _proc_status = '/proc/%d/status' % os.getpid()
    
    _scale = {'kB': 1024.0, 'mB': 1024.0*1024.0,
              'KB': 1024.0, 'MB': 1024.0*1024.0}
    
    def _VmB(VmKey):
        '''Private.
        '''
        global _proc_status, _scale
         # get pseudo file  /proc//status
        try:
            t = open(_proc_status)
            v = t.read()
            t.close()
        except:
            return 0.0  # non-Linux?
         # get VmKey line e.g. 'VmRSS:  9999  kB\n ...'
        i = v.index(VmKey)
        v = v[i:].split(None, 3)  # whitespace
        if len(v) < 3:
            return 0.0  # invalid format?
         # convert Vm value to bytes
        return float(v[1]) * _scale[v[2]]
    
    
    def memory(since=0.0):
        '''Return memory usage in bytes.
        '''
        return _VmB('VmSize:') - since
    
    
    def resident(since=0.0):
        '''Return resident memory usage in bytes.
        '''
        return _VmB('VmRSS:') - since
    
    
    def stacksize(since=0.0):
        '''Return stack size in bytes.
        '''
        return _VmB('VmStk:') - since
    

提交回复
热议问题