NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)