File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ import time
2+ import tracemalloc
3+ from functools import wraps
4+
5+
6+ if not tracemalloc.is_tracing():
7+ tracemalloc.start()
8+
9+ def performance(func):
10+
11+ @wraps(func)
12+ def wrapper(*args, **kwargs):
13+ t0 = time.perf_counter()
14+
15+ snap_before = tracemalloc.take_snapshot()
16+ try:
17+ result = func(*args, **kwargs)
18+ finally:
19+ snap_after = tracemalloc.take_snapshot()
20+ dt = time.perf_counter() - t0
21+
22+ stats = snap_after.compare_to(snap_before, "lineno")
23+ mem_diff = 0
24+ for s in stats:
25+ if s.size_diff > 0:
26+ mem_diff += s.size_diff
27+
28+ performance.counter += 1
29+ performance.total_time += dt
30+ performance.total_mem += mem_diff
31+
32+ return result
33+
34+ return wrapper
35+
36+ performance.counter = 0
37+ performance.total_time = 0.0
38+ performance.total_mem = 0
You can’t perform that action at this time.
0 commit comments