Skip to content

Commit c34acf3

Browse files
Implement performance decorator for function metrics
Adds a performance decorator to measure time and memory usage of functions.
1 parent 591a020 commit c34acf3

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import time
2+
import tracemalloc
3+
from functools import wraps
4+
5+
6+
def performance(func):
7+
"""Measures time and memory of the decorated function and keeps statistics."""
8+
@wraps(func)
9+
def wrapper(*args, **kwargs):
10+
started_here = not tracemalloc.is_tracing()
11+
if started_here:
12+
tracemalloc.start()
13+
tracemalloc.reset_peak()
14+
start = time.perf_counter()
15+
result = func(*args, **kwargs)
16+
elapsed = time.perf_counter() - start
17+
_, peak = tracemalloc.get_traced_memory()
18+
if started_here:
19+
tracemalloc.stop()
20+
21+
performance.counter += 1
22+
performance.total_time += elapsed
23+
performance.total_mem += peak
24+
return result
25+
return wrapper
26+
27+
28+
performance.counter = 0
29+
performance.total_time = 0
30+
performance.total_mem = 0

0 commit comments

Comments
 (0)