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, {}
See About this document... for information on suggesting changes.