2
0

debugging.py 1.0 KB

123456789101112131415161718192021222324252627282930
  1. from functools import wraps
  2. from time import time
  3. def timed_function(func):
  4. """
  5. Very simple profiling decorator for debugging.
  6. Usage:
  7. @timed_function
  8. def my_func():
  9. ...
  10. More advanced alternatives:
  11. - viztracer ../.venv/bin/archivebox manage check # https://viztracer.readthedocs.io/en/latest/filter.html
  12. - python -m cProfile -o archivebox.prof ../.venv/bin/archivebox manage check; snakeviz archivebox.prof
  13. - Django Debug Toolbar + django-debug-toolbar-flamegraph
  14. + Django Requests Tracker (requests-tracker)
  15. """
  16. @wraps(func)
  17. def wrap(*args, **kwargs):
  18. if args and hasattr(args[0], '__module__'):
  19. module = args[0].__module__
  20. else:
  21. module = func.__module__
  22. ts_start = time()
  23. result = func(*args, **kwargs)
  24. ts_end = time()
  25. ms_elapsed = int((ts_end-ts_start) * 1000)
  26. print(f'[DEBUG][{ms_elapsed}ms] {module}.{func.__name__}(...)')
  27. return result
  28. return wrap