Python 用の ASGI Web サーバー。
ドキュメント: https://www.uvicorn.org
Uvicorn は、Python 用の ASGI Web サーバー実装です。
最近まで、Python には非同期フレームワーク用の最小限の低レベルのサーバー/アプリケーション インターフェイスがありませんでした。 ASGI 仕様はこのギャップを埋め、すべての非同期フレームワークで使用できる共通のツール セットの構築を開始できるようになりました。
Uvicorn は HTTP/1.1 と WebSocket をサポートします。
pip
使用してインストールします。
$ pip install uvicorn
これにより、最小限の (純粋な Python) 依存関係で uvicorn がインストールされます。
$ pip install ' uvicorn[standard] '
これにより、「Cython ベース」の依存関係 (可能な場合) およびその他の「オプションの追加機能」を含む uvicorn がインストールされます。
この文脈では、「Cython ベース」とは次のことを意味します。
uvloop
がインストールされ、使用されます。httptools
によって処理されます。また、「オプション」とは次のことを意味します。
websockets
によって処理されます ( wsproto
使用したい場合は、手動でインストールする必要があります)。--reload
フラグはwatchfiles
を使用します。colorama
インストールします。--env-file
オプションを使用する場合は、 python-dotenv
インストールされます。PyYAML
がインストールされると、必要に応じて.yaml
ファイルを--log-config
に提供できるようになります。 example.py
でアプリケーションを作成します。
async def app ( scope , receive , send ):
assert scope [ 'type' ] == 'http'
await send ({
'type' : 'http.response.start' ,
'status' : 200 ,
'headers' : [
( b'content-type' , b'text/plain' ),
],
})
await send ({
'type' : 'http.response.body' ,
'body' : b'Hello, world!' ,
})
サーバーを実行します。
$ uvicorn example:app
確立された Python Web フレームワークのほとんどは、WSGI ベースのフレームワークとして始まりました。
WSGI アプリケーションは、要求を受け取って応答を返す、単一の同期呼び出し可能アプリケーションです。これでは、WSGI が十分にサポートしていない、長時間ポーリングの HTTP 接続や WebSocket 接続で得られるような、存続期間の長い接続は許可されません。
非同期同時実行モデルを使用すると、軽量のバックグラウンド タスクなどのオプションも可能になり、遅い HTTP リクエストの処理など、ネットワーク I/O で長時間ブロックされるエンドポイントの制限要因が少なくなります。
ASGI プロトコルの強みは、サーバー実装をアプリケーション フレームワークから切り離していることです。これにより、Web サーバーとアプリケーション フレームワークの相互運用のエコシステムが可能になります。
最初の ASGI サーバー実装は、もともと Django チャネルを強化するために開発されたもので、Daphne Web サーバーです。
これは実稼働環境で広く実行されており、HTTP/1.1、HTTP/2、および WebSocket をサポートしています。
ここで示したサンプル アプリケーションはどれも、代わりにdaphne
使用して同様に実行できます。
$ pip install daphne
$ daphne app:App
Hypercorn は当初、Quart Web フレームワークの一部でしたが、スタンドアロン ASGI サーバーに分離されました。
Hypercorn は、HTTP/1.1、HTTP/2、および WebSocket をサポートします。
また、 asyncio
の代替として、優れたtrio
async フレームワークもサポートしています。
$ pip install hypercorn
$ hypercorn app:App
Mangum は、AWS Lambda および API Gateway で ASGI アプリケーションを使用するためのアダプターです。
Granian は、HTTP/2、TLS、WebSocket をサポートする ASGI 互換の Rust HTTP サーバーです。
Uvicorn は BSD ライセンスコードです。
慎重にデザインされ、作られています。
— ? —