mcpField
P
python-performance-optimization

python-performance-optimization

github.com/nickcrew开发6693 次安装19 周前更新
代码仓库

关于 python-performance-optimization

面向 Python 开发者的性能优化指南,强调先测量和定位瓶颈,再通过算法、数据结构及加速技术改善运行时间或内存占用。

主要功能

  1. 01优化前先分析性能
  2. 02改进算法与数据结构
  3. 03用生成器降低内存占用
  4. 04缓存重复计算
  5. 05采用 NumPy、Numba 或多进程

适用场景

  1. 01排查生产代码运行缓慢
  2. 02降低数据流水线的内存占用
  3. 03缩短 API 响应或批处理时间

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/nickcrew/claude-cortex --skill python-performance-optimization

安装后在 Claude Code 中输入/python-performance-optimization确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
acceleration.md
algorithms.md
memory.md
profiling.md
string-io.md

详细介绍

Python 性能优化

通过系统分析、算法改进、高效数据结构和加速技术,为 Python 应用提供性能分析、优化和提速方面的专家指导。

适用场景

  • 代码运行速度无法满足生产环境要求
  • CPU 使用率或内存消耗过高
  • 需要缩短 API 响应时间或批处理耗时
  • 应用在负载下无法扩展
  • 优化数据处理流水线或科学计算
  • 通过提升效率降低云基础设施成本
  • 测量性能瓶颈后进行基于性能分析的优化

核心概念

黄金法则:先进行性能分析,再做优化。80% 的执行时间花在 20% 的代码上。

优化层级(按优先级排序):

  1. 算法复杂度 - O(n²) → O(n log n),可带来数量级的提升
  2. 数据结构选择 - 查找时将 List 换成 Set(速度提升 10,000 倍)
  3. 语言特性 - 推导式、内置函数、生成器
  4. 缓存 - 对重复计算进行记忆化
  5. 编译扩展 - 使用 NumPy、Numba、Cython 优化热点路径
  6. 并行处理 - 对 CPU 密集型工作使用多进程

关键原则:算法改进始终胜过微优化。

快速参考

针对特定优化领域加载详细指南:

任务加载参考文档
分析代码并查找瓶颈skills/python-performance-optimization/references/profiling.md
算法和数据结构优化skills/python-performance-optimization/references/algorithms.md
内存优化和生成器skills/python-performance-optimization/references/memory.md
字符串拼接和文件 I/Oskills/python-performance-optimization/references/string-io.md
NumPy、Numba、Cython、多进程skills/python-performance-optimization/references/acceleration.md

优化工作流

阶段 1:测量
  1. 使用 cProfile 分析性能 - 找出运行缓慢的函数
  2. 对热点路径进行行级性能分析 - 找出具体的慢行
  3. 分析内存使用情况 - 检查内存瓶颈
  4. 建立基准测试 - 记录当前性能
阶段 2:分析
  1. 检查算法复杂度 - 是否为 O(n²) 或更差?
  2. 评估数据结构 - 是否在查找时使用了列表?
  3. 找出重复工作 - 能否缓存结果?
  4. 查找 I/O 瓶颈 - 数据库查询、文件操作
阶段 3:优化
  1. 先改进算法 - 影响最大
  2. 使用合适的数据结构 - 使用 Set/dict 实现 O(1) 查找
  3. 应用缓存 - 对耗时函数使用 @lru_cache
  4. 使用生成器 - 适用于大型数据集
  5. 利用 NumPy/Numba - 适用于数值代码
  6. 并行处理 - 对 CPU 密集型任务使用多进程
阶段 4:验证
  1. 重新进行性能分析 - 验证改进效果
  2. 进行基准测试 - 定量测量提速效果
  3. 测试正确性 - 确保优化没有破坏功能
  4. 编写文档 - 说明进行优化的原因

常见优化模式

模式 1:查找时将 List 换成 Set
# Slow: O(n) lookup
if item in large_list:  # Bad

# Fast: O(1) lookup
if item in large_set:   # Good
模式 2:使用推导式
# Slower
result = []
for i in range(n):
    result.append(i * 2)

# Faster (35% speedup)
result = [i * 2 for i in range(n)]
模式 3:缓存耗时计算
from functools import lru_cache

@lru_cache(maxsize=None)
def expensive_function(n):
    # Result cached automatically
    return complex_calculation(n)
模式 4:对大型数据使用生成器
# Memory inefficient
def read_file(path):
    return [line for line in open(path)]  # Loads entire file

# Memory efficient
def read_file(path):
    for line in open(path):  # Streams line by line
        yield line.strip()
模式 5:使用 NumPy 进行向量化
# Pure Python: ~500ms
result = sum(i**2 for i in range(1000000))

# NumPy: ~5ms (100x faster)
import numpy as np
result = np.sum(np.arange(1000000)**2)

应避免的常见错误

  1. 未进行性能分析就开始优化 - 你会优化错代码
  2. 使用列表进行成员测试 - 改用 Set/dict
  3. 在循环中拼接字符串 - 使用 "".join() 或 StringIO
  4. 将整个文件加载到内存中 - 使用生成器
  5. N+1 数据库查询 - 使用 JOIN 或批量查询
  6. 忽略内置函数 - 它们经过 C 语言优化,速度很快
  7. 过早优化 - 优先关注算法改进
  8. 不进行基准测试 - 始终定量测量改进效果

决策树

从这里开始:使用 cProfile 进行性能分析,找出瓶颈

热点路径是算法吗?

  • 是 → 检查复杂度、改进算法、使用更合适的数据结构
  • 否 → 继续

热点路径是计算吗?

  • 数值循环 → 使用 NumPy 或 Numba
  • CPU 密集型 → 使用多进程
  • 性能已经足够快 → 完成

热点路径是内存吗?

  • 大型数据 → 使用生成器、流式处理
  • 大量对象 → 使用 __slots__、对象池
  • 需要缓存 → 使用 @lru_cache 或自定义缓存

热点路径是 I/O 吗?

  • 数据库 → 批量查询、索引、连接池
  • 文件 → 缓冲、流式处理
  • 网络 → 异步 I/O、批量请求

最佳实践

  1. 先进行性能分析,再优化 - 测量并找出真正的瓶颈
  2. 优先优化算法 - O(n²) → O(n) 的效果胜过微优化
  3. 使用恰当的数据结构 - 查找时使用 Set/dict,而不是列表
  4. 善用内置功能 - 由 C 实现的内置功能比纯 Python 更快
  5. 避免过早优化 - 优化性能分析所发现的热点路径
  6. 处理大型数据时使用生成器 - 通过惰性求值减少内存使用
  7. 批量执行操作 - 尽量减少系统调用和网络请求的开销
  8. 缓存开销大的计算 - 使用 @lru_cache 或自定义缓存
  9. 考虑使用 NumPy/Numba - 对数值代码进行向量化和 JIT 编译
  10. 并行处理 CPU 密集型任务 - 使用多进程来利用所有核心

资源

评论

支持 Markdown