mprofile.py (1980B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\pympler\mprofile.py 2 from __future__ import print_function 3 import inspect 4 import sys 5 from pympler import muppy 6 7 class MProfiler(object): 8 9 def __init__(self, codepoints = None, events = None): 10 self.memories = {} 11 self.codepoints = codepoints 12 self.events = events 13 14 def codepoint_included(self, codepoint): 15 if self.codepoints is None: 16 return True 17 for cp in self.codepoints: 18 mismatch = False 19 for i in range(len(cp)): 20 if cp[i] is not None and cp[i] != codepoint[i]: 21 mismatch = True 22 break 23 24 if not mismatch: 25 return True 26 27 return False 28 29 def profile(self, frame, event, arg): 30 if self.events is None or event in self.events: 31 frame_info = inspect.getframeinfo(frame) 32 cp = (frame_info[0], frame_info[2], frame_info[1]) 33 if self.codepoint_included(cp): 34 objects = muppy.get_objects() 35 size = muppy.get_size(objects) 36 if cp not in self.memories: 37 self.memories[cp] = [0, 38 0, 39 0, 40 0] 41 self.memories[cp][0] = 1 42 self.memories[cp][1] = size 43 self.memories[cp][2] = size 44 else: 45 self.memories[cp][0] += 1 46 if self.memories[cp][1] > size: 47 self.memories[cp][1] = size 48 if self.memories[cp][2] < size: 49 self.memories[cp][2] = size 50 51 def run(self, cmd): 52 sys.setprofile(self.profile) 53 try: 54 exec cmd 55 finally: 56 sys.setprofile(None) 57 58 return self 59 60 61 if __name__ == '__main__': 62 p = MProfiler() 63 p.run("print 'hello'") 64 print(p.memories)