gunicornの使い方
概要
- flaskなどのweb appをラップして実用的なAPI(web)機能を提供する
インストール
$ python3 -m pip install gunicorn
起動オプション
--bind <ip-address>:<port>
- ip-address
- アクセスを許可するIP
- port
- gunucornの起動するポート
- ip-address
--workers=<num>
- num
- ワーカー数
- num
--timeout=<num>
- num
- タイムアウトの秒数(second)
- num
具体例
flaskのコードをgunicornで起動する
- flask単体だと、同じ位置のファイルをインポートできるが、gunicornからだとインポートできない
Failed to find attribute 'app' in 'src.bin'
のようなエラーが出る__init__.py
にて明示的にfrom .app import app
を追加する必要がある
ディレクトリ構造
.
├── README.md
├── bin
│ ├── __init__.py
│ └── wsgi.py
└── var
├── META.pkl
├── model.pkl
...
コード
from flask import Flask, request, jsonify
import json
from pathlib import Path
from loguru import logger
WD = Path(__file__).parent.parent.absolute()
logger.info(f"working directory is {WD}")
app = Flask(__name__)
@app.route('/', methods=["GET"])
def home():
return "foobar"
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000)
起動コマンド
$ gunicorn --bind 127.0.0.1:4400 --workers=2 --timeout=600 bin:app
--bind 127.0.0.1
はローカルホストからのみのアクセスを許可する--bind 0.0.0.0
にするとすべてのアクセスを許可する