import time class Profiler(object): def __init__(self, enabled=False): self.enabled = enabled self.cp = {} self.cp_ignored = [] self.iter = 0 self.start_time = time.clock() self.last_time = self.start_time self.tot = 0. def reset(self, enabled=False): self.enabled = enabled self.cp = {} self.cp_ignored = [] self.iter = 0 self.start_time = time.clock() self.last_time = self.start_time def checkpoint(self, name, ignore=False): # ignore flag needed when benchmarking threads with ratekeeper if not self.enabled: return tt = time.clock() if name not in self.cp: self.cp[name] = 0. if ignore: self.cp_ignored.append(name) self.cp[name] += tt - self.last_time if not ignore: self.tot += tt - self.last_time self.last_time = tt def display(self): if not self.enabled: return self.iter += 1 print "******* Profiling *******" for n in self.cp: ms = self.cp[n] if n in self.cp_ignored: print "%30s: %7.2f perc: %1.0f" % (n, ms*1000.0, ms/self.tot*100), " IGNORED" else: print "%30s: %7.2f perc: %1.0f" % (n, ms*1000.0, ms/self.tot*100) print "Iter clock: %2.6f TOTAL: %2.2f" % (self.tot/self.iter, self.tot)