Timeit is a simple set of functions for measuring execution time for python functions.
timeit can use tracepoints to measure each step time, and display summary at the end:
example:
if __name__ == '__main__':
init_timeit()
print 'aloha !'
@timeit()
def func():
print 'a'
timeit_stamp(inspect.currentframe())
time.sleep(1)
timeit_stamp(inspect.currentframe())
time.sleep(2)
timeit_stamp(inspect.currentframe())
print 'b'
@timeit()
def func2():
print 'a'
timeit_stamp(inspect.currentframe())
time.sleep(3)
timeit_stamp(inspect.currentframe())
time.sleep(4)
timeit_stamp(inspect.currentframe())
print 'b'
func()
func2()
gives such output:
aloha !
*** Measuring function <function func at 0x26625f0>
a
*** tracepoint at line: 106 0.000|timeit_stamp(inspect.currentframe())
*** tracepoint at line: 108 1.001|timeit_stamp(inspect.currentframe())
*** tracepoint at line: 110 3.003|timeit_stamp(inspect.currentframe())
b
*** method: "'func'" total: 3.00 sec args:((), {})
{'first_line': 106, 'last_line': 110, 'total': 3.0032649040222168}
[{'argspec': ArgSpec(args=[], varargs=None, keywords=None, defaults=None),
'execution_time': 3.0032460689544678,
'id': 40248816,
'method': <function func at 0x26625f0>}]
*** Measuring function <function func2 at 0x26626e0>
a
*** tracepoint at line: 116 3.004|timeit_stamp(inspect.currentframe())
*** tracepoint at line: 118 6.006|timeit_stamp(inspect.currentframe())
*** tracepoint at line: 120 10.007|timeit_stamp(inspect.currentframe())
b
*** method: "'func2'" total: 7.00 sec args:((), {})
{'first_line': 106, 'last_line': 120, 'total': 10.00725793838501}
[{'argspec': ArgSpec(args=[], varargs=None, keywords=None, defaults=None),
'execution_time': 3.0032460689544678,
'id': 40248816,
'method': <function func at 0x26625f0>},
{'argspec': ArgSpec(args=[], varargs=None, keywords=None, defaults=None),
'execution_time': 7.003587007522583,
'id': 40249056,
'method': <function func2 at 0x26626e0>}]