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
with
statement - measuring time
Synopsis¶
To use the code provided in this chapter, write
>>> from fuzzingbook.Timer import <identifier>
and then make use of the following features.
The Timer
class allows you to measure elapsed real time (in fractional seconds). Its typical usage is in conjunction with a with
clause:
>>> with Timer() as t:
>>> some_long_running_function()
>>> t.elapsed_time()
0.024375417007831857
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()
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
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())
print("Stopping time in between:")
with Timer() as t:
for i in range(10):
some_long_running_function()
print(t.elapsed_time())
That's it, folks – enjoy!
Lessons Learned¶
- With the
Timer
class, it is very easy to measure elapsed time.
The content of this project is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. The source code that is part of the content, as well as the source code used to format and display that content is licensed under the MIT License. Last change: 2023-11-11 18:25:47+01:00 • Cite • Imprint