Awesome asyncio
asyncioを扱う資料や関連プロジェクトをまとめたAwesomeリストです。
目次
Webフレームワーク
Webアプリケーションを構築するためのライブラリ。
- FastAPI - 型ヒントに基づく非常に高性能なPython 3.6+ APIフレームワーク。StarletteとPydanticを利用。
- Django - 大規模なコミュニティとエコシステムを持つ、実績ある高水準Python Webフレームワーク。
- Starlette - 高性能サービスを構築するための軽量ASGIフレームワーク/ツールキット。
- aiohttp - asyncio(PEP-3156)向けHTTPクライアント/サーバー。
- sanic - 高速動作を目的に記述されたPython 3.5+ Webサーバー。
- Quart - Flaskと同じAPIを持つasyncio Webマイクロフレームワーク。
- autobahn - クライアントとサーバー向けにasyncioとTwistedをサポートするWebSocket/WAMP実装。
- websockets - 正確性と単純さを重視した、PythonでWebSocketサーバーとクライアントを構築するライブラリ。
- Tornado - 高性能なWebフレームワークおよび非同期ネットワークライブラリ。
- uvicorn - 非常に高速なASGIサーバー。
メッセージキュー
メッセージキューを使うアプリケーションを実装するためのライブラリ。
- aioamqp - asyncioを使ったAMQP実装。
- pyzmq - ZeroMQのPythonバインディング。
- aiozmq - ZeroMQとの代替Asyncio統合。
- crossbar - 分散アプリケーションとマイクロサービス向けのネットワークプラットフォーム。
- asyncio-nats - NATSメッセージングシステムのクライアント。
- aiokafka - Apache Kafkaのクライアント。
データベースドライバー
データベースへ接続するためのライブラリ。
- asyncpg - Python/asyncio向けの高速PostgreSQLデータベースクライアントライブラリ。
- asyncpgsa - sqlalchemy coreに対応したAsyncpg。
- aiopg - PostgreSQLデータベースへアクセスするライブラリ。
- aiomysql - MySQLデータベースへアクセスするライブラリ。
- aioodbc - ODBCデータベースへアクセスするライブラリ。
- pymongo - 同期APIと非同期APIの両方を提供する公式MongoDB Pythonドライバー。
- redis-py - Redis Pythonクライアント(現在はaioreadisを含む)。
- aiocouchdb - aiohttp(asyncio)上に構築されたCouchDBクライアント。
- aioinflux - aiohttp上に構築されたInfluxDBクライアント。
- aioes - asyncio互換のelasticsearchドライバー。
- peewee-async - peeweeとaiopgに基づくORM実装。
- GINO - SQLAlchemy coreを基盤とし、asyncpg方言を備えた軽量な非同期Python ORM。
- Tortoise ORM - Django風APIと扱いやすいリレーション管理を備えたネイティブな複数バックエンド対応ORM。
- Databases - PostgreSQL、MySQL、SQLiteをサポートするSQLAlchemy core向け非同期データベースアクセス。
- Prisma Client Python - Pydanticを利用し、スキーマ専用に調整される自動生成・完全型安全なORM。SQLite、PostgreSQL、MySQL、MongoDB、MariaDBなどに対応。
- Piccolo - 非同期・同期の両モードで動作し、使いやすい管理GUIとASGIミドルウェアを備えたORM/クエリビルダー。
- Beanie - pymongoとPydantic上に構築された非同期MongoDB ODM。
ネットワーク
ネットワーク上で通信するためのライブラリ。
- AsyncSSH - SSHv2プロトコルの非同期クライアントおよびサーバー実装。
- aiodns - asyncio向けのシンプルなDNSリゾルバー。
- aioping - ICMP(ping)プロトコルの高速asyncio実装。
- httpx - requests互換APIを備えたPython 3向け非同期HTTPクライアント。
GraphQL
GraphQLサーバーを構築するためのライブラリ。
- Ariadne - GraphQLサーバーを実装するためのスキーマファーストPythonライブラリ。
- Tartiflette -
libgraphqlparser上に構築されたスキーマファーストのPython 3.6+ GraphQLエンジン。 - Strawberry - Django、Flask、FastAPI/Starletteに対応したコードファーストのPython 3 GraphQLサーバー。
テスト
asyncioベースのアプリケーションをテストするためのライブラリ。
- aiomock - 非同期メソッドに対応するPythonモックライブラリ。
- asynctest - asyncioライブラリのテスト機能で標準unittestパッケージを拡張。
- pytest-asyncio - Pytestのasyncio対応。
- aresponses - Asyncio HTTPモック。responsesライブラリに類似し、これはrequestsで使用される。
- aioresponses - Python aiohttpパッケージでWebリクエストをモック/フェイクするためのヘルパー。
代替ループ
asyncioループの代替実装。
- uvloop - libuv上に構築された非常に高速なasyncioイベントループ実装。
その他
その他の優れたasyncioライブラリ。
- aiochan - asyncio上でチャネル、select、マルチプロセッシングを使うCSP形式の並行処理。
- aiocache - 複数のバックエンドに対応するキャッシュマネージャー。
- aiofiles - asyncio向けファイルサポート。
- aiopath - asyncio向け非同期
pathlib。 - aiodebug - asyncioプログラムの監視とテストを行う小さなライブラリ。
- aiorun - 起動と正常終了に伴う一般的な定型処理をすべて扱う
run()関数。 - aiosc - 軽量なOpen Sound Control実装。
- aioserial - pySerialの差し替え可能な代替。
- aiozipkin - zipkinを使ったasyncio向け分散トレーシング計装。
- asgiref - ASGIとWSGIを統合するバックエンドユーティリティ。sync_to_asyncおよびasync_to_sync関数ラッパーを含む。
- async_property - 非同期プロパティ用Pythonデコレーター。
- ruia - asyncioベースの非同期Webスクレイピング用マイクロフレームワーク。
- kubernetes_asyncio - Kubernetes向け非同期クライアントライブラリ。
- aiomisc -
asyncio向けの各種ユーティリティ。 - taskiq - 非同期分散タスクマネージャー(celeryに似ているが非同期)。
読み物
asyncioに関するドキュメント、ブログ投稿、その他の優れた文章。
- Official asyncio documentation - 非同期I/O、イベントループ、コルーチン、タスク。
- Short well-written intro to asyncio - ジェネレーター、コルーチン、ネイティブコルーチン、async/await。
- AsyncIO for the Working Python Developer - 基本例からURL取得へ進む、非同期プログラミングの丁寧な入門。
- Test limits of Python aiohttp - python-aiohttpで100万リクエストを実行。
- ASGI (Asynchronous Server Gateway Interface) - 非同期対応Python Webサーバー、フレームワーク、アプリケーション間の標準インターフェースを提供する、WSGIの精神的後継。
- First Principles Introduction to Asyncio - asyncioの内部動作を流行語なしで第一原理から説明する入門。
- Developing and Testing an Asynchronous API with FastAPI and Pytest - テスト駆動開発(TDD)を使い、FastAPIで非同期APIを開発・テストする方法を扱うチュートリアル。
- Python Concurrency with asyncio - 並行プログラミングと最先端のasyncioライブラリで遅いPythonコードを高速化する方法を学ぶ。
講演
asyncioに関する優れた講演の録画。
- Topics of Interest (Python Asyncio) | スクリーンキャスト | スライド - PyCon Brasil 2015基調講演(David Beazley)。
- Python Asynchronous I/O Walkthrough - 8部構成のコード解説(Philip Guo)。
- Async/await in Python 3.5 and why it is awesome - EuroPython 2016(Yury Selivanov)。
- Fear and Awaiting in Async: A Savage Journey to the Heart of the Coroutine Dream | スクリーンキャスト - PyOhio 2016基調講演(David Beazley)。
- Asynchronous Python for the Complete Beginner | スライド - PyCon 2017(Miguel Grinberg)。
- Demystifying Python’s Async and Await Keywords - JetBrains TV 2020(Michael Kennedy)
asyncioの代替
Pythonにおける非同期プログラミングの代替手法。一部はasyncioとの一定の互換性を目指しますが、まったく互換性のないものもあります。
- curio - コルーチン並行処理ライブラリ。
- Curio-Asyncio Bridge - 基本的なcurioからasyncioへのコルーチンブリッジ。
- trio - 人間と蛇の人々のためのPythonらしい非同期I/O。
- trio-asyncio - Trio上でasyncioメインループを再実装。
- AnyIO - trioまたはasyncioのどちらの上でも動作する高水準非同期並行処理・ネットワークフレームワーク。