next up previous contents index
Next: 11 Internet and WWW Up: 10.8 Extensions - Deriving Previous: 10.8.1 OldProfile Class

10.8.2 HotProfile Class

This profiler is the fastest derived profile example. It does not calculate caller-callee relationships, and does not calculate cumulative time under a function. It only calculates time spent in a function, so it runs very quickly (re: very low overhead). In truth, the basic profiler is so fast, that is probably not worth the savings to give up the data, but this class still provides a nice example.

class HotProfile(Profile):
 def trace_dispatch_exception(self, frame, t):
 rt, rtt, rfn, rframe, rcur = self.cur
 if rcur and not rframe is frame:
 return self.trace_dispatch_return(rframe, t)
 return 0
 def trace_dispatch_call(self, frame, t):
 self.cur = (t, 0, frame, self.cur)
 return 1
 def trace_dispatch_return(self, frame, t):
 rt, rtt, frame, rcur = self.cur
 rfn = `frame.f_code`
 pt, ptt, pframe, pcur = rcur
 self.cur = pt, ptt+rt, pframe, pcur
 if self.timings.has_key(rfn):
 nc, tt = self.timings[rfn]
 self.timings[rfn] = nc + 1, rt + rtt + tt
 else:
 self.timings[rfn] = 1, rt + rtt
 return 1
 def snapshot_stats(self):
 self.stats = {}
 for func in self.timings.keys():
 nc, tt = self.timings[func]
 nor_func = self.func_normalize(func)
 self.stats[nor_func] = nc, nc, tt, 0, {}



guido@cnri.reston.va.us

AltStyle によって変換されたページ (->オリジナル) /