python-async について
Python アプリケーションで asyncio と async/await のパターンを使うためのスキルです。並行処理、エラー処理、テストなどを用途別のモジュールで案内します。
主な機能
- 01async/await の基本パターン
- 02タスクと並行処理の管理
- 03セマフォとロックによるレート制御
- 04タイムアウト、エラー、キャンセル処理
- 05pytest-asyncio によるテスト
- 06よくある問題とベストプラクティス
活用シーン
- 01非同期 Web API の構築
- 02I/O 操作の並行実行
- 03並行 Web スクレイパーの作成
- 04WebSocket アプリケーションの開発
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ athola/ claude-night-market --skill python-asyncインストール後、Claude Code で/python-asyncを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
modules/advanced-patterns.mdbasic-patterns.mdconcurrency-control.mderror-handling-timeouts.mdpitfalls-best-practices.mdreal-world-applications.mdtesting-async.md詳細
Async Python パターン
Python アプリケーション向けの asyncio と async/await のパターンです。
クイックスタート
import asyncio
async def main():
print("Hello")
await asyncio.sleep(1)
print("World")
asyncio.run(main())
使用する場面
- 非同期 Web API(FastAPI、aiohttp)の構築
- 並行 I/O 処理の実装
- 並行リクエストを行う Web スクレイパーの作成
- リアルタイムアプリケーション(WebSockets)の開発
- 複数の独立したタスクの同時処理
- 非同期通信を行うマイクロサービスの構築
使用しない場面
- CPU 負荷の高い処理の最適化には、代わりに python-performance を使用します
- 非同期コードのテストには、代わりに python-testing の async モジュールを使用します
モジュール
このスキルでは段階的な読み込みを使用します。内容は目的別のモジュールに整理されています。
modules/basic-patterns.mdを参照してください。基本的な async/await、gather()、タスク管理について説明しますmodules/concurrency-control.mdを参照してください。レート制限のためのセマフォとロックについて説明しますmodules/error-handling-timeouts.mdを参照してください。エラー処理、タイムアウト、キャンセルについて説明しますmodules/advanced-patterns.mdを参照してください。コンテキストマネージャー、イテレーター、プロデューサー・コンシューマーについて説明しますmodules/testing-async.mdを参照してください。pytest-asyncio を使ったテストについて説明しますmodules/real-world-applications.mdを参照してください。Web スクレイピングとデータベース操作について説明しますmodules/pitfalls-best-practices.mdを参照してください。よくある間違いとベストプラクティスについて説明します
ニーズに応じて特定のモジュールを読み込むか、詳細なガイダンスが必要な場合はすべてを参照してください。
終了基準
- 非同期パターンが正しく適用されている
- 非同期コードにブロッキング処理がない
- 適切なエラー処理が実装されている
- 必要な箇所でレート制限が設定されている
- pytest-asyncio でテストが成功する
トラブルシューティング
よくある問題
RuntimeError: no current event loop
エントリーポイントとして asyncio.run() を使用してください。Python 3.10 以降では get_event_loop() の使用を避けてください。
非同期コンテキストでのブロッキング呼び出し
同期 I/O を asyncio.to_thread() または loop.run_in_executor() に移してください。
テストがいつまでも終了しない
pytest-asyncio がインストールされていること、およびテスト関数に @pytest.mark.asyncio が付与されていることを確認してください。
コメント
Markdown 対応