Uvicorn
はじめに
[編集]Uvicornは、PythonのASGI(Asynchronous Server Gateway Interface)アプリケーションを実行するための高速なサーバーです。このハンドブックでは、Uvicornの基本から応用までを解説し、実践的な使用方法を紹介します。
Uvicornとは
[編集]Uvicornは、PythonのASGIアプリケーションを実行するための軽量で高速なサーバーです。以下の特徴を持っています。
- 高速: uvloopとhttptoolsを利用し、高いパフォーマンスを実現。
- 非同期処理: ASGIをサポートし、非同期処理を効率的に実行。
- 柔軟性: FastAPI、Starlette、DjangoなどのASGIアプリケーションに対応。
Uvicornの特徴
[編集]高速なパフォーマンス
[編集]Uvicornは、uvloopとhttptoolsを利用して、高いパフォーマンスを実現します。
非同期処理
[編集]ASGIをサポートし、非同期処理を効率的に実行します。
シンプルな設定
[編集]コマンドラインや設定ファイルで簡単に設定できます。
Uvicornのインストール
[編集]Uvicornは、pip
を使って簡単にインストールできます。
pip install uvicorn
Uvicornの基本的な使い方
[編集]Uvicornは、コマンドラインから簡単に起動できます。以下は、基本的な使い方の例です。
uvicorn myapp:app
myapp
: Pythonモジュール名。app
: ASGIアプリケーションオブジェクト。
例: FastAPIアプリケーションの実行
[編集]- main.py
from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"}
このコードをmain.py
として保存し、以下のコマンドで実行します。
uvicorn main:app --reload
Uvicornの設定
[編集]Uvicornは、コマンドライン引数または設定ファイルで設定できます。
コマンドライン引数での設定例
[編集]uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
--host
: バインドするホスト。--port
: バインドするポート。--workers
: ワーカーの数。
設定ファイルでの設定例
[編集]uvicorn_config.py
を作成し、以下のように設定します。
# uvicorn_config.py host = "0.0.0.0" port = 8000 workers = 4
設定ファイルを指定して起動するには、以下のコマンドを使用します。
uvicorn main:app --config uvicorn_config.py
UvicornとASGIアプリケーション
[編集]Uvicornは、ASGIアプリケーションを実行するために設計されています。以下は、FastAPIアプリケーションをUvicornで実行する例です。
FastAPIアプリケーションの例
[編集]- main.py
from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"}
Uvicornで起動
[編集]uvicorn main:app --reload
Uvicornのワーカーモデル
[編集]Uvicornは、以下のワーカーモデルをサポートしています。
- 単一ワーカー: デフォルトのモード。
- マルチワーカー:
--workers
オプションでワーカー数を指定。
例: マルチワーカーモード
[編集]uvicorn main:app --workers 4
Uvicornのパフォーマンスチューニング
[編集]Uvicornのパフォーマンスを最適化するためには、以下の設定を調整します。
- ワーカーの数: CPUコア数の2倍程度が目安。
- タイムアウト: デフォルトは120秒。必要に応じて調整。
- ワーカーモデル: アプリケーションの特性に応じて選択。
例: パフォーマンスチューニング
[編集]uvicorn main:app --workers 8 --timeout 300
Uvicornのロギングとモニタリング
[編集]Uvicornは、ログ出力とモニタリング機能を提供します。
ログ設定
[編集]uvicorn main:app --log-level debug
--log-level
: ログレベルを指定(debug
,info
,warning
,error
,critical
)。
モニタリング
[編集]Uvicornのステータスを確認するには、SIGTTIN
やSIGTTOU
シグナルを使用します。
Uvicornのセキュリティ
[編集]Uvicornを安全に運用するためには、以下の点に注意します。
- ファイアウォールの設定: 不要なポートを閉じる。
- HTTPSの使用: リバースプロキシ(Nginxなど)と組み合わせてHTTPSを有効化。
- ワーカーの分離: ワーカーを分離して、セキュリティリスクを軽減。
Uvicornのデプロイ
[編集]Uvicornは、以下の方法でデプロイできます。
例: Dockerfile
[編集]FROM tiangolo/uvicorn-gunicorn-fastapi:python3.8 COPY ./app /app
Uvicornのユースケース
[編集]- Webアプリケーションのデプロイ: FastAPI、StarletteなどのASGIアプリケーションを実行。
- マイクロサービス: 軽量で高速なサーバーとして利用。
- リアルタイムアプリケーション: 非同期処理を活用。
参考文献
[編集]このハンドブックが、Uvicornの理解と実践に役立つことを願っています。Uvicornを活用し、高性能なASGIアプリケーションをデプロイしましょう!