time_statistics.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import time
  2. import asyncio
  3. import inspect
  4. from functools import wraps
  5. from foundation.observability.logger.loggering import server_logger as logger
  6. def track_execution_time(func):
  7. """
  8. 追踪函数执行时间并通过日志输出的装饰器
  9. 同时支持同步和异步函数,记录函数开始执行、执行完成及耗时(保留两位小数)
  10. """
  11. @wraps(func)
  12. def sync_wrapper(*args, **kwargs):
  13. logger.info(f"[{func.__name__}] 开始执行")
  14. start_time = time.perf_counter()
  15. try:
  16. return func(*args, **kwargs)
  17. finally:
  18. duration = time.perf_counter() - start_time
  19. logger.info(f"[{func.__name__}] 执行完成,耗时: {duration:.2f} 秒")
  20. @wraps(func)
  21. async def async_wrapper(*args, **kwargs):
  22. logger.info(f"[{func.__name__}] 开始执行")
  23. start_time = time.perf_counter()
  24. try:
  25. return await func(*args, **kwargs)
  26. finally:
  27. duration = time.perf_counter() - start_time
  28. logger.info(f"[{func.__name__}] 执行完成,耗时: {duration:.2f} 秒")
  29. # 检查函数是否是异步函数
  30. if inspect.iscoroutinefunction(func):
  31. return async_wrapper
  32. else:
  33. return sync_wrapper