How to measure time taken between lines of code in python?
If you want to measure CPU time, can use time.process_time()
for Python 3.3 and above:
import timestart = time.process_time()# your code here print(time.process_time() - start)
First call turns the timer on, and second call tells you how many seconds have elapsed.
There is also a function time.clock()
, but it is deprecated since Python 3.3 and will be removed in Python 3.8.
There are better profiling tools like timeit
and profile
, however time.process_time() will measure the CPU time and this is what you're are asking about.
If you want to measure wall clock time instead, use time.time()
.
With a help of a small convenience class, you can measure time spent in indented lines like this:
with CodeTimer(): line_to_measure() another_line() # etc...
Which will show the following after the indented line(s) finishes executing:
Code block took: x.xxx ms
UPDATE: You can now get the class with pip install linetimer
and then from linetimer import CodeTimer
. See this GitHub project.
The code for above class:
import timeitclass CodeTimer: def __init__(self, name=None): self.name = " '" + name + "'" if name else '' def __enter__(self): self.start = timeit.default_timer() def __exit__(self, exc_type, exc_value, traceback): self.took = (timeit.default_timer() - self.start) * 1000.0 print('Code block' + self.name + ' took: ' + str(self.took) + ' ms')
You could then name the code blocks you want to measure:
with CodeTimer('loop 1'): for i in range(100000): passwith CodeTimer('loop 2'): for i in range(100000): passCode block 'loop 1' took: 4.991 msCode block 'loop 2' took: 3.666 ms
And nest them:
with CodeTimer('Outer'): for i in range(100000): pass with CodeTimer('Inner'): for i in range(100000): pass for i in range(100000): passCode block 'Inner' took: 2.382 msCode block 'Outer' took: 10.466 ms
Regarding timeit.default_timer()
, it uses the best timer based on OS and Python version, see this answer.