Stopwatch

Stopwatch class is similar to other profiling tools like cProfile, but it focuses on profiling of individual code parts rather than functions. Method report() collects and composes the final report in a form of a RowCollector object.

>>> sw = Stopwatch()
>>> sw.start('part1')
>>> time.sleep(.001)
>>> sw.start('part2')
>>> time.sleep(.001)
>>> sw.stop('part2')
>>> sw.stop('part1')
>>> sw.start('part3')
>>> time.sleep(.003)
>>> sw.stop('part3')
>>> report = sw.report()
>>> report['Node']
['stopwatch', 'part1/part2', 'part1', 'part3']
>>> report.to_text()
   Laps      Time  Time/Lap         Node
0     6  0.000035  0.000006    stopwatch
1     1  0.001389  0.001389  part1/part2
2     1  0.002804  0.002804        part1
3     1  0.003863  0.003863        part3

The same effect as above can also be achieved using with statements.

>>> with Stopwatch() as sw:
>>>     with sw.observer('part1'):
>>>         time.sleep(.001)
>>>         with sw.observer('part2'):
>>>             time.sleep(.001)
>>>     with sw.observer('part3'):
>>>         time.sleep(.003)
>>>     sw.report().to_text()
   Laps      Time  Time/Lap         Node
0     6  0.000033  0.000006    stopwatch
1     1  0.001301  0.001301  part1/part2
2     1  0.002698  0.002698        part1
3     1  0.003781  0.003781        part3