python-performance-optimization について
Python 開発者向けの性能分析・改善ガイドです。CPU、メモリ、I/O の計測と実装上の最適化を扱い、測定に基づくボトルネック特定を支援します。
主な機能
- 01CPU・メモリ・行単位のプロファイリング
- 02呼び出し関係と性能指標の確認
- 03アルゴリズムとデータ構造の最適化
- 04キャッシュ・並列化・ネイティブ拡張の指針
活用シーン
- 01Python アプリの性能ボトルネック特定
- 02遅延とメモリ使用量の削減
- 03データベースと I/O の最適化
- 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 にあります。上記のナビゲーション層では不十分な場合は、そのファイルを参照してください。
ベストプラクティス
- 最適化の前にプロファイリングする - 計測して実際のボトルネックを見つけます
- ホットパスに注目する - 最も頻繁に実行されるコードを最適化します
- 適切なデータ構造を使用する - 検索には辞書、要素の判定にはセット
- 早すぎる最適化を避ける - まず明快さを優先し、その後で最適化します
- 組み込み関数を使用する - これらは C で実装されています
- コストの高い計算をキャッシュする - lru_cache を使用します
- I/O 操作をバッチ処理する - システムコールを削減します
- 大規模なデータセットにはジェネレーターを使用する
- 数値演算には NumPy を検討する
- 本番コードをプロファイリングする - 稼働中のシステムには py-spy を使用します
よくある落とし穴
- プロファイリングせずに最適化する
- 不必要にグローバル変数を使用する
- 適切なデータ構造を使用しない
- 不必要なデータのコピーを作成する
- データベースにコネクションプーリングを使用しない
- アルゴリズムの計算量を無視する
- まれにしか通らないコードパスを過剰に最適化する
- メモリ使用量を考慮しない
コメント
Markdown 対応