【Python】uWSGIとGunicorn違いが判らなかったので調べてみた

【Python】uWSGIとGunicorn違いが判らなかったので調べてみた

【Python】uWSGIとGunicorn違いが判らなかったので調べてみた

Dockerでの構築ではまったのがWSGIとNGINXのやり取り。
私の持っているpythonの参考書がGunicornを使っていて、WEB上にはuWSGIの事例が沢山。
「そういえばアプリケーションサーバーの違い知らないや」と思い調べてみました。

そもそもWSGIとはなんぞや

PEP3333で定義された仕様の事で、Web Server Gateway Interfaceの略。

Python 3では文字列とバイト列が「違うモノ」として扱われるようになり、バイナリはbytes型、「文字列」はUnicode文字列のことを表すようになった。それまでは例えばHTTPヘッダのデータはテキスト/バイナリどちらとしても扱われていたが、どちらで扱うかを決めなくてはいけなくなった。WSGIではヘッダデータを文字列として扱っている。

細かく見ていくと色々深そうだけど「こういうモノ」として記憶しておいても問題なさそうなので詳細はスキップ。

WSGIに準拠したアプリケーションサーバーはいくつもある

uWSGIやGunicornだけがWSGIに準拠しているわけではないらしい。

  • uWSGI
  • Gunicorn
  • mod_wsgi
  • mod_python
  • isapi-wsgi
  • PyISAPIe
  • NGINX Unit

でもググって出てくるのは大概『uWSGI』『Gunicorn』なのでこの2つの違いをまとめてみます。

uWSGIとGunicornの大きな違い

一番の違いは【出来る事の多さ】の様です。

  1. Gunicorn = シンプルかつ必要十分な機能を持つ
  2. uWSGI  = 多機能でRudyやPHPなどにも使える汎用性を持つ(その分設定パラメータも多い)

Gunicornは起動や設定がシンプルで扱い易いようです。
一方、uWSGIはとにかく多機能。httpsや専用のuwsgiプロトコルも使えスプーラ機能もある。

uWSGIとGunicornの速度の違い

シンプルである分だけGunicornの方が早いと思っていたのですが、uWSGIの方が早いようです。
早くて多機能だったらuWSGIを使いますよね。
WEB上の記事が多いわけです。

まとめ

参考書は横に置いてuWSGIで設定した方が良さそうですね。

uWSGIはパラメーターが120以上あるそうです。

理解するのはなかなか遠そうです。