/ pytlib / utils / memory.py
memory.py
 1  from __future__ import division
 2  # derived from https://stackoverflow.com/questions/938733/total-memory-used-by-python-process
 3  from builtins import object
 4  from past.utils import old_div
 5  import os
 6  class Memory(object):
 7  
 8      def __init__(self):
 9          self._proc_status = '/proc/%d/status' % os.getpid()
10          self._scale = {'kB': 1024.0, 'mB': 1024.0*1024.0, 'KB': 1024.0, 'MB': 1024.0*1024.0}
11  
12      def _VmB(self,VmKey):
13          '''Private.
14          '''
15           # get pseudo file  /proc/<pid>/status
16          try:
17              t = open(self._proc_status)
18              v = t.read()
19              t.close()
20          except:
21              return 0.0  # non-Linux?
22           # get VmKey line e.g. 'VmRSS:  9999  kB\n ...'
23          i = v.index(VmKey)
24          v = v[i:].split(None, 3)  # whitespace
25          if len(v) < 3:
26              return 0.0  # invalid format?
27           # convert Vm value to bytes
28          return float(v[1]) * self._scale[v[2]]
29  
30  
31      def memory(self,scale='mB'):
32          return old_div(self._VmB('VmSize:'), self._scale[scale])
33  
34  
35      def resident(self,scale='mB'):
36          return old_div(self._VmB('VmRSS:'), self._scale[scale])
37  
38  
39      def stacksize(self,scale='mB'):
40          return old_div(self._VmB('VmStk:'), self._scale[scale])