Gunicorn
@202104で version 20.1.0
大枠:
モニタープロセスとワーカープロセス
install
$ python -m pip install gunicorn
ubuntuからいれると、古いし、python2対応とかになる。
$ apt show gunicorn
config :
pythonなので、pythonの書式で configファイルを書く。
worker_class
よく読んでないけど、asyncでパフォーマンス上がるなら、調べて、使いたい。
workerの設定はあるけど、threadは? answerで、worker, threadも適度にみたいな話があるけど、threadの設定項目は、 defaultは1のようだ。
reload:
開発時には使わない想定だけど、切り替えの狭間?で、gunicornにもreload欲しいときがある。
command line上では、--reload でok
ただ、configファイル上では効かない。documentも configへの言及がない。
error例
flaskに loggingで、
code:python
logging.basicConfig(filename='logging.log', level=logging.DEBUG,
format="%(levelname)s:%(module)s:%(thread)d: %(message)s")
としたら、gunicornが立ち上がらなくなった....理由は不明。
gunicornの error messageは、
gunicorn.service: Main process exited, code=exited, status=3/NOTIMPLEMENTED
これで、検索しても、
Deploy
非同期で使う
-k sync か -k genv か
、同時に動くスレッド数は20個程度に抑えられているのが通常である。一方で、ウェブアプリではその内部処理でデータベースアクセスや他サーバへのアクセスを伴うことが多いので
新たなスレッドを立ち上げることなく擬似的なスレッドで他のリクエストを処理しようというのがbottleとgeventを使うときの考え方である
参考