| 123456789101112131415161718192021222324252627282930 |
- from functools import wraps
- from time import time
- def timed_function(func):
- """
- Very simple profiling decorator for debugging.
- Usage:
- @timed_function
- def my_func():
- ...
-
- More advanced alternatives:
- - viztracer ../.venv/bin/archivebox manage check # https://viztracer.readthedocs.io/en/latest/filter.html
- - python -m cProfile -o archivebox.prof ../.venv/bin/archivebox manage check; snakeviz archivebox.prof
- - Django Debug Toolbar + django-debug-toolbar-flamegraph
- + Django Requests Tracker (requests-tracker)
- """
- @wraps(func)
- def wrap(*args, **kwargs):
- if args and hasattr(args[0], '__module__'):
- module = args[0].__module__
- else:
- module = func.__module__
- ts_start = time()
- result = func(*args, **kwargs)
- ts_end = time()
- ms_elapsed = int((ts_end-ts_start) * 1000)
- print(f'[DEBUG][{ms_elapsed}ms] {module}.{func.__name__}(...)')
- return result
- return wrap
|