Closed3

Memo: Learn Gunicorn

SeradaSerada

Gunicorn

Gunicorn(Green Unicorn)は,Pythonで書かれたWSGI HTTPサーバで,PythonのWebアプリケーションをうごかすためのサーバソフトウェア.
WSGI(Web Server Gateway Interface)は,Pythonで書かれたWebアプリケーションとWebサーバ間の通信を標準化するためのインターフェースであり,Gunicornはこれに準拠して動作する.

SeradaSerada

Gunicornの特徴

  1. シンプルで高性能: Gunicornは設定がシンプルで使いやすく,効率的に動作するように設計されている.PythonのWebフレームワークを本番環境で動作させるために広く使用されている.
  2. プリフォーク型ワーカ: Gunicornはプリフォーク型マルチプロセスモデルを採用しており,アプリケーションを処理するために複数のワーカを事前に生成する.これにより,並列処理の効率が向上し,リクエストの処理速度が速くなる.
  3. 互換性: GunicornはPOSIX互換のPythonランタイムで動作し,各種のPython Webフレームワークに対応している.
  4. スケーラビリティと柔軟性: 設定ファイルやコマンドラインオプションを使用して,ワーカ数,ワーカタイプ,バインドアドレス,タイムアウト,ログ設定などのパラメータを柔軟に設定することができる.
  5. 計量: Gunicornは,依存関係が少なく,インストールが容易で,リソース消費がするないため,非常に軽量である.
SeradaSerada

使用法

  1. インストール

    pip install gunicorn
    
  2. コマンド
    最もシンプルなもの: gunicorn <モジュール名>:<アプリケーションオブジェクト名>

    • モジュール名: Pythonファイルの名前(main.pyの場合main)や,Pythonパッケージ(myapp/ディレクトリの場合myapp)を指す.モジュールには,Gunicornで使用するWSGIアプリケーションオブジェクトが定義されている必要がある.

    • アプリケーションオブジェクト名: 上記のモジュール内で定義されているWSGIアプケーションオブジェクトの名前を指す.通常,FlaskやFastAPIなどのフレームワークで作成されるアプリケーションオブジェクトの名前がappであるため,この名前がよく使用される.

  3. オプション

  • -wまたは--workers
    ワーカの数を指定する.ワーカの数が多いほど,並列処理性能が向上するが,CPUやメモリの使用量も増加する.
    使用例: gunicorn -w 4 main:app
  • -bまたは--bind
    バインドするアドレスとポートを指定する.通常はIP:PORTの形式で指定する.
    使用例: gunicorn -b 0.0.0.0:8000 main:app
  • -tまたは--timeout
    ワーカがリクエストの処理を待つ最大時間を指定する(デフォルトは30秒).
    使用例: gunicorn -t 60 main:app
  • -cまたは--config
    Gunicornの設定ファイルを指定する.設定ファイルには,オプションの設定をまとめて記述できる.
    使用例: gunicorn -c gunicorn_config.py main:app
  • -kまたは--worker-class
    使用するワーカーの種類を指定する.sync(デフォルト), gevent, eventlet, uvicorn.workers.UvicornWorkerなど,非同期処理やWebSocketサポートのために異なるワーカーを選択することができる.
    使用例: gunicorn -k uvicorn.workers.UvicornWorker main:app
  • --access-logfile
    アクセスログを保存するファイルを指定する.-を指定すると,標準出力に出力される.
    使用例: gunicorn --access-logfile ./logs/api.log main:app
  • --log-level
    ログの詳細度を指定する.
    使用例: gunicorn --log-level info main:app
  • --daemon
    デーモンとしてバックグラウンドでGunicornを起動する.
    使用例: gunicorn --daemon main:app
  • --reload
    コードの変更を検知して自動的に再起動する.開発環境での利用が想定されている.
    使用例: gunicorn --reload main:app
  • --chdir
    Gunicornを起動する前にディレクトリを変更する(指定したディレクトリに移動してから起動する).
    使用例: gunicorn --chdir /path/to/app main:app
このスクラップは2ヶ月前にクローズされました