performance_stats.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import time
  2. import functools
  3. from collections import defaultdict
  4. from typing import Dict, List
  5. class PerformanceStats:
  6. """性能统计类,用于收集和展示方法执行时间"""
  7. _stats: Dict[str, List[float]] = defaultdict(list)
  8. @classmethod
  9. def add_execution_time(cls, func_name: str, execution_time: float):
  10. """添加执行时间记录"""
  11. cls._stats[func_name].append(execution_time)
  12. @classmethod
  13. def get_stats(cls) -> Dict[str, dict]:
  14. """获取统计结果"""
  15. results = {}
  16. for func_name, times in cls._stats.items():
  17. results[func_name] = {
  18. 'count': len(times),
  19. 'total_time': sum(times),
  20. 'avg_time': sum(times) / len(times),
  21. 'min_time': min(times),
  22. 'max_time': max(times)
  23. }
  24. return results
  25. @classmethod
  26. def print_stats(cls):
  27. """打印统计结果"""
  28. stats = cls.get_stats()
  29. print("\n性能统计结果:")
  30. print("-" * 80)
  31. print(f"{'方法名':<40} {'调用次数':>8} {'总时间(s)':>12} {'平均时间(s)':>12}")
  32. print("-" * 80)
  33. for func_name, data in stats.items():
  34. print(f"{func_name:<40} {data['count']:8d} {data['total_time']:12.6f} {data['avg_time']:12.6f}")
  35. def measure_time(func):
  36. """测量方法执行时间的装饰器"""
  37. @functools.wraps(func)
  38. def wrapper(*args, **kwargs):
  39. start_time = time.time()
  40. result = func(*args, **kwargs)
  41. execution_time = time.time() - start_time
  42. PerformanceStats.add_execution_time(func.__name__, execution_time)
  43. return result
  44. return wrapper