#!/usr/bin/env python3 """ 性能分析入口文件 用于启动带有性能分析功能的应用程序。 使用方法: python profile_main.py [options] 选项: -h, --help 显示帮助信息 --profile, -p 启用详细性能分析(使用 pyinstrument) --memory, -m 启用内存使用分析 --output, -o FILE 性能分析报告输出文件(HTML格式) --threshold, -t SEC 设置性能监控阈值(秒) --stats, -s 在程序结束时输出性能统计报告 """ import sys import argparse import os # 将项目根目录添加到 sys.path ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, ROOT_DIR) # 解析命令行参数 parser = argparse.ArgumentParser(description='性能分析入口文件') parser.add_argument('--profile', '-p', action='store_true', help='启用详细性能分析(使用 pyinstrument)') parser.add_argument('--memory', '-m', action='store_true', help='启用内存使用分析') parser.add_argument('--output', '-o', type=str, default='performance_report.html', help='性能分析报告输出文件(HTML格式)') parser.add_argument('--threshold', '-t', type=float, default=0.5, help='设置性能监控阈值(秒)') parser.add_argument('--stats', '-s', action='store_true', help='在程序结束时输出性能统计报告') args = parser.parse_args() # 设置全局性能分析配置 os.environ['PERFORMANCE_PROFILE'] = '1' if args.profile else '0' os.environ['PERFORMANCE_MEMORY'] = '1' if args.memory else '0' os.environ['PERFORMANCE_OUTPUT'] = args.output os.environ['PERFORMANCE_THRESHOLD'] = str(args.threshold) os.environ['PERFORMANCE_STATS'] = '1' if args.stats else '0' # 导入并运行主程序 from core.utils.performance import profile, aprofile from main import main import asyncio async def main_with_profile(): """ 带有性能分析的主函数入口 """ if args.profile: # 使用 pyinstrument 进行详细性能分析 from pyinstrument import Profiler from pyinstrument.renderers import HTMLRenderer profiler = Profiler() profiler.start() try: await main() finally: profiler.stop() # 输出分析结果到控制台 print("\n" + "=" * 80) print("性能分析结果") print("=" * 80) print(profiler.print()) # 保存HTML报告 try: html = profiler.render(HTMLRenderer()) with open(args.output, 'w', encoding='utf-8') as f: f.write(html) print(f"\n性能分析报告已保存到: {args.output}") except Exception as e: print(f"\n保存性能分析报告失败: {e}") else: # 不使用详细分析,直接运行 await main() if __name__ == "__main__": try: asyncio.run(main_with_profile()) finally: # 输出性能统计报告 if args.stats: from core.utils.performance import performance_stats print("\n" + "=" * 80) print("性能统计报告") print("=" * 80) print(performance_stats.report())