用途
该技能面向 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 版本要求、安装方式(如作为技能包如何安装)以及收费或许可信息,暂未提供。实际优化效果取决于具体代码与运行环境,资料未给出量化的性能提升数据。