Skip to content

Commit 362dd5c

Browse files
authored
Performance tracking decorator
Implement a performance decorator to track execution time and memory usage.
1 parent 9a399e7 commit 362dd5c

1 file changed

Lines changed: 39 additions & 0 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import time
2+
import tracemalloc
3+
from functools import wraps
4+
5+
tracemalloc.start()
6+
7+
8+
def performance(fn):
9+
@wraps(fn)
10+
def wrapper(*args, **kwargs):
11+
12+
performance.counter += 1
13+
14+
current_before, _ = tracemalloc.get_traced_memory()
15+
tracemalloc.reset_peak()
16+
17+
start_time = time.perf_counter()
18+
19+
try:
20+
result = fn(*args, **kwargs)
21+
return result
22+
23+
finally:
24+
end_time = time.perf_counter()
25+
26+
performance.total_time += end_time - start_time
27+
28+
current_memory, peak_memory = tracemalloc.get_traced_memory()
29+
30+
performance.total_mem += max(
31+
0, peak_memory - current_before
32+
)
33+
34+
return wrapper
35+
36+
37+
performance.counter = 0
38+
performance.total_time = 0.0
39+
performance.total_mem = 0

0 commit comments

Comments
 (0)