python-concurrency-performance について
python-concurrency-performanceは、Pythonの並行処理モデルの選択、ライフサイクルの安全性、性能改善に関する実践的な指針を示すスキルです。並行方式の選定や、キャンセル、リソースリーク、ボトルネックの調査に役立ちます。
主な機能
- 01負荷に応じたモデルの選択
- 02キャンセルと期限の伝播
- 03並行数とバックプレッシャーの制御
- 04性能変更の計測と検証
- 05タスクとスレッドのリーク確認
活用シーン
- 01並行I/OやCPU処理向けモデルの選択
- 02非同期呼び出し間のキャンセル追跡
- 03無制限なタスク生成の防止
- 04変更後の正常なシャットダウン確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ ahgraber/ skills --skill python-concurrency-performanceインストール後、Claude Code で/python-concurrency-performanceを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/concurrency-models.mddeadlines-cancellation-lifecycle.mdleak-detection.md詳細
Python の並行処理とパフォーマンス
概要
適切な並行処理は、開発者の好みではなく、ワークロードに合ったモデルを選ぶことから始まります。 このスキルでは、モデルの選択、キャンセル/期限の動作、ライフサイクルの安全性に関する既定の方針を定め、暗黙の魔法よりも明示的な制御を優先します。
これらの推奨事項は、望ましい既定値として扱ってください。 プロジェクトの制約により異なる選択が必要な場合は、トレードオフと、それを補う対策を明示してください。
使用する場面
asyncio、threading、multiprocessing、concurrent.futuresのどれを使うか選択するとき- 非同期呼び出しチェーン全体に期限やキャンセルを伝播させるとき
- ファンアウト、バックプレッシャー、セマフォで制御する並行処理に上限を設けるとき
- 競合状態、デッドロック、優先度逆転を診断するとき
- 最適化の前後でスループットのボトルネックをプロファイリングするとき
- シャットダウン時やライフサイクル遷移時に、タスクやスレッドがリークしないことを確認するとき
使用しない場面
- NumPy/C 拡張のほうが適している、純粋に CPU バウンドな数値処理
- 並行 I/O を伴わない単一スレッドのスクリプト
- 分散システムの調整(代わりにワークフロー/オーケストレーションのスキルを使用してください)
クイックリファレンス
- ワークロードの特性に応じて並行処理モデルを選択します(I/O バウンド → asyncio/スレッド、CPU バウンド → multiprocessing)。
- キャンセルとクリーンアップは明示的に行い、リソースのクローズにガベージコレクションを頼らないでください。
- セマフォやキューの上限でファンアウトとバックプレッシャーを制御します。上限のない起動は OOM を招きます。
- 最適化の前に計測し、変更のたびに再計測して効果を確認します。
- ライフサイクルに影響する変更(起動、シャットダウン、再接続)では、タスク/スレッドがリークしないことを確認します。
よくある間違い
- I/O バウンドな処理にスレッドをデフォルトで使う — ネットワーク I/O では、
asyncioによりスレッドセーフ性の問題を完全に回避できます。スレッドは効果がないまま同期のオーバーヘッドを加えます。 - キャンセルの伝播を無視する — キャンセルされた親が子をキャンセルしないと、タスクがリークし、接続が開いたままになります。
- 上限のない
gather/submit呼び出し — セマフォや上限付きエグゼキューターを使わずに数千のタスクを起動すると、イベントループが飢餓状態になったり、OS スレッドを使い果たしたりします。 - プロファイリングせずに最適化する — ボトルネックを推測すると、間違った問題を解決する複雑なコードにつながります。必ず最初にプロファイリングしてください。
- シャットダウンの検証を怠る — 正常なシャットダウンを検証しないテストでは、本番環境で負荷がかかったときに初めて表面化する、徐々に進行するリソースリークが見過ごされます。
適用範囲に関する注意
- これらの推奨事項は、一般的なケースで望ましい既定値として扱い、普遍的なルールとはみなさないでください。
- 既定の方針がプロジェクトの制約と衝突する場合や、結果を悪化させる場合は、より適した代替案を提案し、このケースで優れている理由を説明してください。
- 方針から逸脱する場合は、トレードオフと、それを補う対策(テスト、可観測性、移行、ロールバック)を明示してください。
呼び出しに関する通知
- このスキルを
python-concurrency-performanceという名前で呼び出す際は、その旨をユーザーに伝えてください。
参考資料
references/concurrency-models.mdreferences/deadlines-cancellation-lifecycle.mdreferences/leak-detection.md
コメント
Markdown 対応