"""
A module that helps to inject time profiling code
in other modules to measures actual execution times
of blocks of code.
"""
__author__ = "Anand B. Pillai"
__version__ = "0.1"
import time
def timeprofile():
""" A factory function to return an instance of TimeProfiler """
return TimeProfiler()
class TimeProfiler:
""" A utility class for profiling execution time for code """
def __init__(self):
# Dictionary with times in seconds
self.timedict = {}
def mark(self, slot=''):
""" Mark the current time into the slot 'slot' """
# Note: 'slot' has to be string type
# we are not checking it here.
self.timedict[slot] = time.time()
def unmark(self, slot=''):
""" Unmark the slot 'slot' """
# Note: 'slot' has to be string type
# we are not checking it here.
if self.timedict.has_key(slot):
del self.timedict[slot]
def lastdiff(self):
""" Get time difference between now and the latest marked slot """
# To get the latest slot, just get the max of values
return time.time() - max(self.timedict.values())
def elapsed(self, slot=''):
""" Get the time difference between now and a previous
time slot named 'slot' """
# Note: 'slot' has to be marked previously
return time.time() - self.timedict.get(slot)
def diff(self, slot1, slot2):
""" Get the time difference between two marked time
slots 'slot1' and 'slot2' """
return self.timedict.get(slot2) - self.timedict.get(slot1)
def maxdiff(self):
""" Return maximum time difference marked """
# Difference of max time with min time
times = self.timedict.values()
return max(times) - min(times)
def timegap(self):
""" Return the full time-gap since we started marking """
# Return now minus min
times = self.timedict.values()
return time.time() - min(times)
def cleanup(self):
""" Cleanup the dictionary of all marks """
self.timedict.clear()
if __name__ == "__main__":
# Demo code
profiler = timeprofile()
# Mark time
profiler.mark()
# Execute large loop
for x in xrange(10000):
pass
# Get time
print profiler.elapsed()
# Do other things
profiler.mark('t')
for x in range(10000):
for y in range(10000):
pass
print profiler.elapsed('t')
# Get total time elapsed
print profiler.timegap()
# Get maximum diff for marks
print profiler.maxdiff()