Closed3
Memo: Learn Gunicorn
Gunicorn
Gunicorn(Green Unicorn)は,Pythonで書かれたWSGI HTTPサーバで,PythonのWebアプリケーションをうごかすためのサーバソフトウェア.
WSGI(Web Server Gateway Interface)は,Pythonで書かれたWebアプリケーションとWebサーバ間の通信を標準化するためのインターフェースであり,Gunicornはこれに準拠して動作する.
Gunicornの特徴
- シンプルで高性能: Gunicornは設定がシンプルで使いやすく,効率的に動作するように設計されている.PythonのWebフレームワークを本番環境で動作させるために広く使用されている.
- プリフォーク型ワーカ: Gunicornはプリフォーク型マルチプロセスモデルを採用しており,アプリケーションを処理するために複数のワーカを事前に生成する.これにより,並列処理の効率が向上し,リクエストの処理速度が速くなる.
- 互換性: GunicornはPOSIX互換のPythonランタイムで動作し,各種のPython Webフレームワークに対応している.
- スケーラビリティと柔軟性: 設定ファイルやコマンドラインオプションを使用して,ワーカ数,ワーカタイプ,バインドアドレス,タイムアウト,ログ設定などのパラメータを柔軟に設定することができる.
- 計量: Gunicornは,依存関係が少なく,インストールが容易で,リソース消費がするないため,非常に軽量である.
使用法
-
インストール
pip install gunicorn
-
コマンド
最もシンプルなもの:gunicorn <モジュール名>:<アプリケーションオブジェクト名>
-
モジュール名: Pythonファイルの名前(
main.py
の場合main
)や,Pythonパッケージ(myapp/
ディレクトリの場合myapp
)を指す.モジュールには,Gunicornで使用するWSGIアプリケーションオブジェクトが定義されている必要がある. -
アプリケーションオブジェクト名: 上記のモジュール内で定義されているWSGIアプケーションオブジェクトの名前を指す.通常,FlaskやFastAPIなどのフレームワークで作成されるアプリケーションオブジェクトの名前が
app
であるため,この名前がよく使用される.
-
-
オプション
-
-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ヶ月前にクローズされました