コンテンツにスキップ

Uvicorn

出典: フリー教科書『ウィキブックス(Wikibooks)』

はじめに

[編集]

Uvicornは、PythonのASGI(Asynchronous Server Gateway Interface)アプリケーションを実行するための高速なサーバーです。このハンドブックでは、Uvicornの基本から応用までを解説し、実践的な使用方法を紹介します。

Uvicornとは

[編集]

Uvicornは、PythonのASGIアプリケーションを実行するための軽量で高速なサーバーです。以下の特徴を持っています。

  • 高速: uvloopとhttptoolsを利用し、高いパフォーマンスを実現。
  • 非同期処理: ASGIをサポートし、非同期処理を効率的に実行。
  • 柔軟性: FastAPIStarletteDjangoなどの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のステータスを確認するには、SIGTTINSIGTTOUシグナルを使用します。

Uvicornのセキュリティ

[編集]

Uvicornを安全に運用するためには、以下の点に注意します。

  • ファイアウォールの設定: 不要なポートを閉じる。
  • HTTPSの使用: リバースプロキシ(Nginxなど)と組み合わせてHTTPSを有効化。
  • ワーカーの分離: ワーカーを分離して、セキュリティリスクを軽減。

Uvicornのデプロイ

[編集]

Uvicornは、以下の方法でデプロイできます。

  • Docker: Dockerコンテナとしてデプロイ。
  • Heroku: Herokuにデプロイ。
  • AWS: AWS LambdaやECSにデプロイ。

例: Dockerfile

[編集]
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.8

COPY ./app /app

Uvicornのユースケース

[編集]
  • Webアプリケーションのデプロイ: FastAPI、StarletteなどのASGIアプリケーションを実行。
  • マイクロサービス: 軽量で高速なサーバーとして利用。
  • リアルタイムアプリケーション: 非同期処理を活用。

参考文献

[編集]

このハンドブックが、Uvicornの理解と実践に役立つことを願っています。Uvicornを活用し、高性能なASGIアプリケーションをデプロイしましょう!