Skip to main content

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

    uvloophttptoolsはどちらも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のデプロイでは、uvloophttptoolsを使用します。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で実現できます。