Timer#
The code in this notebook helps with measuring time.
Prerequisites
This notebook needs some understanding on advanced concepts in Python, notably
classes
the Python
withstatementmeasuring time
Synopsis#
To use the code provided in this chapter, write
>>> from fuzzingbook.Timer import <identifier>
and then make use of the following features.
Note: The examples in this section only work after the rest of the cells have been executed.
with Timer() as t:
some_long_running_function()
t.elapsed_time()
0.030869709007674828
Measuring Time#
The class Timer allows measuring the elapsed time during some code execution.
import bookutils.setup
import time
def clock() -> float:
"""
Return the number of fractional seconds elapsed since some point of reference.
"""
return time.perf_counter()
from types import TracebackType
class Timer:
def __init__(self) -> None:
"""Constructor"""
self.start_time = clock()
self.end_time = None
def __enter__(self) -> Any:
"""Begin of `with` block"""
self.start_time = clock()
self.end_time = None
return self
def __exit__(self, exc_type: Type, exc_value: BaseException,
tb: TracebackType) -> None:
"""End of `with` block"""
self.end_time = clock() # type: ignore
def elapsed_time(self) -> float:
"""Return elapsed time in seconds"""
if self.end_time is None:
# still running
return clock() - self.start_time
else:
return self.end_time - self.start_time # type: ignore
Here’s an example:
def some_long_running_function() -> None:
i = 1000000
while i > 0:
i -= 1
print("Stopping total time:")
with Timer() as t:
some_long_running_function()
print(t.elapsed_time())
Stopping total time:
0.03015562499058433
print("Stopping time in between:")
with Timer() as t:
for i in range(10):
some_long_running_function()
print(t.elapsed_time())
Stopping time in between:
0.0305006249982398
0.0604882909974549
0.09118766599567607
0.12214049999602139
0.15291795798111707
0.18302566598867998
0.21359354100422934
0.2463232500012964
0.2783738329890184
0.3103841659903992
That’s it, folks – enjoy!
Lessons Learned#
With the
Timerclass, it is very easy to measure elapsed time.