すべてのプロダクト
Search
ドキュメントセンター

Application Real-Time Monitoring Service:uWSGI で Django アプリケーションまたは Flask アプリケーションを起動する際に Python 用 ARMS エージェントをインストールする

最終更新日:Jul 18, 2025

uWSGI 上で Django または Flask を使用する Python アプリケーションの場合、起動前に、アプリケーションのエントリファイルに Application Real-Time Monitoring サービス (ARMS) の Python 用エージェントをインポートします。さらに、uWSGI 構成ファイルに lazy-apps を追加します。

前提条件

Python 用 ARMS エージェント がインストールされています。

手順

  1. Python 用エージェントをインポートするために、uWSGI ファイルの最初の行に以下を追加します。

    from aliyun.opentelemetry.instrumentation.auto_instrumentation import sitecustomize
  2. lazy-apps 起動モードを有効にすることで、uWSGI のアプリケーション読み込み方法を変更します。例:

    uwsgi --http :8000 --wsgi-file app.py --callable application --master --enable-threads --threads 2 --processes 4 --lazy-apps
    説明

    aliyun-instrument コマンドプレフィックスは省略します。

構成ファイルの例:

[uwsgi]
http = :8000
wsgi-file = /python-demo/django-demo/myproject/myproject/wsgi.py
callable = application
# ソケットファイルの場所を指定します
socket = /python-demo/django-demo/myproject/wsgi.sock
# ソケットファイルの権限を設定します
chmod-socket = 660

# プロセス関連の設定
master = true
enable-threads = true
threads = 4
processes = 4
# lazy-apps を有効にします
lazy-apps = true

lazy-apps は、アプリケーションモジュールの読み込み方法を制御する uWSGI の構成オプションです。lazy-apps が true に設定されている場合、uWSGI は各ワーカープロセスが起動した後にアプリケーションを読み込みます。デフォルトでは、uWSGI はマスタープロセスが起動したときにアプリケーションを読み込みます。

lazy-apps を有効にした場合の効果:

  • メモリの分離:各ワーカープロセスは自身のコンテキストでアプリケーションを読み込むため、異なるプロセス間での特定の状態が互いに干渉することはありません。

  • 動的な再読み込み:開発モードでは、各ワーカープロセスが起動時にアプリケーションを再読み込みするため、マスタープロセス全体を再起動する必要がなく、コードのホットアップデートを実行する方が便利です。

  • グローバル状態の問題の回避:アプリケーションでグローバル変数が使用されている場合、lazy-apps が有効になっていると、各ワーカープロセスは自身の状態を持つため、共有状態によって発生する問題が軽減されます。

lazy-apps を有効にしなかった場合の効果:

  • グローバル状態の共有:アプリケーションでグローバル変数が使用されている場合、これらの変数はすべてのワーカープロセスで共有されるため、予期しない動作が発生する可能性があります。

  • 起動速度:すべてのワーカープロセスはマスタープロセスが起動したときにアプリケーションを読み込むため、全体的な起動速度は比較的高速になる可能性があります。特に、多数のワーカープロセスを起動する場合、プロセスごとにアプリケーションを 1 つずつ読み込むよりも高速になる可能性があります。

  • コード変更の即時反映:lazy-apps がない場合、コードが変更されると、変更を反映するために、単一のワーカープロセスを再起動するのではなく、uWSGI プロセス全体を再起動する必要があります。