Python Webサーバ
Pythonエージェントは、いくつかの一般的なWebサーバで検証済みです。一部のサーバでは、Contrastを適切に動作させるために特定の設定オプションが必要です。
Gunicorn
Gunicornは、Django、Pyramid、Tornadoなどの一般的なフレームワークと一緒に組み合わせて使うことができます。
Gunicornを起動するには次のコマンドを使用します:gunicorn app.wsgi_app:application
(app
はアプリケーションフォルダ名)
Gunicornサーバで次のような設定ができます。
バインド:
-b ADDRESS1
gunicorn -b 127.0.0.1:8000
タイムアウト:
-t INT または --timeout INT
この秒数以上反応がないワーカは、強制終了されて、再起動されます。
値は、正の数か
0
になります。0
を設定すると、全てのワーカのタイムアウトが完全に無効になり、タイムアウトは無限になります。デフォルトは30秒です。同期処理のワーカ(Syncワーカ)への影響が確実な場合にのみ、この値を大きくします。非同期処理のワーカの場合には、ワーカプロセスは通信中となるため、 1つのリクエストを処理するために必要な時間の長さが影響することはありません。
Uvicorn
Uvicornは非同期のWebサーバで、pip install uvicorn[standard]
でインストールすることができます。
以下は、推奨される設定です。
--loop=uvloop
--http=httptools
uvloop
とhttptools
はどちらもCythonで書かれており、パフォーマンスが向上しますが、WindowsやPyPyとの互換性がありません。--interface
いくつかのASGIプロトコルに対してこのオプションを設定できます。WSGIを使用していて、
—ws=websockets
を使用している場合、websocketsは使用されず、デフォルトのautoになります。--ws
--ws-max-size
、--ws-ping-interval
、--ws-ping-timeout
を設定しており、—ws
がwebsocketsで設定されていない場合、全て無視されます。Uvicornのマネージャとしてgunicornを使用する場合は、以下を実行します。
gunicorn -k uvicorn.workers.UvicornWorker
UvicornWorkerのデプロイでは、
uvloop
とhttptools
を使用します。PyPyで実行する場合には、代わりにpure-Pythonの実装を使用する必要があります。これを行うには、UvicornH11Worker class.gunicorn -k uvicorn.workers.UvicornH11Worker
を使用します。
uWSGIの設定
uWSGIでContrastを実行する場合は、次の設定オプションが必要です。コマンドラインまたはuWSGI設定(.ini)ファイルで指定します。
--enable-threads
:スレッドの使用を有効にします。エージェントがバックグラウンドスレッドを開始できるように、このオプションを有効にする必要があります。--single-interpreter
:初期化されたPythonプロセスで、Pythonエージェントが有効になるようにします。このオプションを指定すると、アプリケーションのリクエストを処理するプロセスと同じプロセスでContrastが初期化されます。--master
を指定する場合は、--lazy-apps
も指定します。マスターモードで実行すると、uWSGIはマスタープロセスでアプリケーションを初期化しますが、リクエストを処理するワーカーにこのプロセスがフォークされます。正しく動作させるためには、各ワーカープロセスで個々にContrastを初期化する必要がありますが、--lazy-apps
で実現できます。