SuperAPI AI 工具集

python-performance-optimization

编程与开发

查看项目

更新于 10-15 09:51

技能介绍

用途

该技能面向 Python 代码的性能剖析与优化,目标是先通过测量定位真实瓶颈,再根据数据修复热点,而不是凭直觉优化。适用触发场景包括:用户反馈 Python 代码运行缓慢或要求加速执行;对 Python 应用进行剖析或基准测试;降低 CPU 时间、内存消耗或 I/O 等待;优化数据库查询或数据处理流水线;调试内存泄漏或内存占用过高;在并行化策略之间做选择;评估算法层面与实现层面的改进。

主要能力

剖析类型

  • CPU 剖析:识别耗时函数(cProfile、py-spy)
  • 内存剖析:追踪内存分配与泄漏(tracemalloc、memory_profiler)
  • 逐行剖析:以行级粒度进行剖析(line_profiler)
  • 调用图:可视化函数调用关系

性能指标

执行时间、内存使用(峰值与平均)、CPU 利用率、I/O 等待时间。

优化策略

算法层面(更好的算法与数据结构)、实现层面(更高效的代码模式)、并行化(多线程/多进程)、缓存(避免重复计算)、原生扩展(在关键路径使用 C/Rust)。

剖析工具

  • cProfile(CPU 剖析):python -m cProfile -o output.prof script.py,python -m pstats output.prof
  • line_profiler(逐行):uv add --dev line-profiler(或 uv tool install line-profiler),kernprof -l -v script.py
  • memory_profiler(内存):uv add --dev memory-profiler,python -m memory_profiler script.py
  • py-spy(生产环境剖析):uv tool install py-spy,py-spy record -o profile.svg -- python script.py,py-spy top --pid 12345

关键优化模式

  • 数据结构选择:字典/集合用于查找(O(1) 对比列表搜索 O(n));大数据集用生成器(常量内存);类上使用 __slots__ 降低单实例内存。
  • 代码层面:列表推导式优于循环;str.join() 优于 += 拼接;热点循环中使用局部变量而非全局访问;内联简单操作;使用内置函数(C 实现)。
  • 缓存:functools.lru_cache 用于开销大的纯函数;weakref.WeakValueDictionary 用于对 GC 友好的缓存。
  • 并行化:multiprocessing 用于 CPU 密集型任务(真正并行);threading 用于共享内存的 I/O 密集型任务;asyncio 用于大量并发操作的 I/O 密集型任务。
  • 内存优化:tracemalloc 检测内存泄漏(快照对比);文件/流处理用迭代器替代列表;weakref 缓存允许垃圾回收。
  • 数据库优化:使用 executemany() 批量操作并单次提交;为频繁查询的列建索引;只选择需要的列(避免 SELECT *);使用 EXPLAIN QUERY PLAN 分析。

使用方式

快速计时与基准测试:使用 time.time() 进行简单计时,或使用 timeit 进行准确基准测试,例如 timeit.timeit("sum(range(1000000))", number=100)。基准测试也可使用装饰器封装 time.perf_counter() 测量函数执行时间;基于 pytest 的基准测试可通过 pip install pytest-benchmark 引入。

最佳实践包括:优化前先剖析、聚焦热点路径、选择合适的数据结构、避免过早优化、使用内置函数、缓存开销大的计算、批量化 I/O 操作、大数据集使用生成器、数值运算考虑 NumPy、对生产代码使用 py-spy 进行实时剖析。

常见陷阱包括:未剖析就优化、不必要地使用全局变量、未使用合适的数据结构、创建不必要的数据副本、数据库未使用连接池、忽视算法复杂度、过度优化罕见代码路径、未考虑内存使用。

技能附带性能检查清单与参考文档 references/optimization-patterns.md,其中包含所有剖析工具的详细代码示例、优化模式(列表推导式、生成器、字符串拼接、字典查找、局部变量、函数调用开销)、高级优化(NumPy、lru_cache、slots、multiprocessing、异步 I/O)、数据库优化、内存泄漏检测以及基准测试工具。

适用场景

调试缓慢的 Python 代码、降低 CPU 时间与内存占用、排查内存泄漏、优化数据库查询与数据流水线、决定采用 threading/multiprocessing/async 等并行策略、评估算法与实现层面的改进。

限制

资料未提供该技能具体支持的操作系统、Python 版本要求、安装方式(如作为技能包如何安装)以及收费或许可信息,暂未提供。实际优化效果取决于具体代码与运行环境,资料未给出量化的性能提升数据。