mcpField
P
python-performance-optimization

python-performance-optimization

github.com/wshobson開発41.9k36.0k 回インストール2 週間前に更新
リポジトリ

python-performance-optimization について

Python 開発者向けの性能分析・改善ガイドです。CPU、メモリ、I/O の計測と実装上の最適化を扱い、測定に基づくボトルネック特定を支援します。

主な機能

  1. 01CPU・メモリ・行単位のプロファイリング
  2. 02呼び出し関係と性能指標の確認
  3. 03アルゴリズムとデータ構造の最適化
  4. 04キャッシュ・並列化・ネイティブ拡張の指針

活用シーン

  1. 01Python アプリの性能ボトルネック特定
  2. 02遅延とメモリ使用量の削減
  3. 03データベースと I/O の最適化
  4. 04データ処理パイプラインの高速化

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/wshobson/agents --skill python-performance-optimization

インストール後、Claude Code で/python-performance-optimizationを入力して読み込まれたか確認します。

同梱ファイルreferences/advanced-patterns.mdreferences/details.md

詳細

Python パフォーマンス最適化

Python コードのプロファイリング、分析、最適化を行い、パフォーマンスを向上させるための包括的なガイドです。CPU プロファイリング、メモリ最適化、実装のベストプラクティスなどを含みます。

このスキルを使用する場面

  • Python アプリケーションのパフォーマンスボトルネックを特定するとき
  • アプリケーションのレイテンシと応答時間を削減するとき
  • CPU を集中的に使用する操作を最適化するとき
  • メモリ消費量とメモリリークを削減するとき
  • データベースクエリのパフォーマンスを改善するとき
  • I/O 操作を最適化するとき
  • データ処理パイプラインを高速化するとき
  • 高性能なアルゴリズムを実装するとき
  • 本番アプリケーションをプロファイリングするとき

中核となる概念

1. プロファイリングの種類
  • CPU プロファイリング: 時間のかかる関数を特定します
  • メモリプロファイリング: メモリの割り当てとリークを追跡します
  • ラインプロファイリング: 行単位の粒度でプロファイリングします
  • コールグラフ: 関数の呼び出し関係を可視化します
2. パフォーマンス指標
  • 実行時間: 操作にかかる時間
  • メモリ使用量: ピーク時および平均のメモリ消費量
  • CPU 使用率: プロセッサの使用パターン
  • I/O 待機: I/O 操作に費やされる時間
3. 最適化戦略
  • アルゴリズム: より優れたアルゴリズムとデータ構造
  • 実装: より効率的なコードパターン
  • 並列化: マルチスレッド/マルチプロセス
  • キャッシュ: 冗長な計算を回避します
  • ネイティブ拡張: クリティカルパスには C/Rust を使用します

クイックスタート

基本的な計測
import time

def measure_time():
    """Simple timing measurement."""
    start = time.time()

    # Your code here
    result = sum(range(1000000))

    elapsed = time.time() - start
    print(f"Execution time: {elapsed:.4f} seconds")
    return result

# Better: use timeit for accurate measurements
import timeit

execution_time = timeit.timeit(
    "sum(range(1000000))",
    number=100
)
print(f"Average time: {execution_time/100:.6f} seconds")

詳細なパターンと実例

詳細なパターンのドキュメントは references/details.md にあります。上記のナビゲーション層では不十分な場合は、そのファイルを参照してください。

ベストプラクティス

  1. 最適化の前にプロファイリングする - 計測して実際のボトルネックを見つけます
  2. ホットパスに注目する - 最も頻繁に実行されるコードを最適化します
  3. 適切なデータ構造を使用する - 検索には辞書、要素の判定にはセット
  4. 早すぎる最適化を避ける - まず明快さを優先し、その後で最適化します
  5. 組み込み関数を使用する - これらは C で実装されています
  6. コストの高い計算をキャッシュする - lru_cache を使用します
  7. I/O 操作をバッチ処理する - システムコールを削減します
  8. 大規模なデータセットにはジェネレーターを使用する
  9. 数値演算には NumPy を検討する
  10. 本番コードをプロファイリングする - 稼働中のシステムには py-spy を使用します

よくある落とし穴

  • プロファイリングせずに最適化する
  • 不必要にグローバル変数を使用する
  • 適切なデータ構造を使用しない
  • 不必要なデータのコピーを作成する
  • データベースにコネクションプーリングを使用しない
  • アルゴリズムの計算量を無視する
  • まれにしか通らないコードパスを過剰に最適化する
  • メモリ使用量を考慮しない

コメント