全部產品
Search
文件中心

Application Real-Time Monitoring Service:在使用uWSGI啟動Django或Flask專案時接入Python探針

更新時間:Jul 09, 2025

如果您的Python應用使用了Django或Flask架構,且部署在uWSGI上,您需要通過在應用主入口檔案引入Python探針,然後啟動應用,同時還需在uWSGI設定檔中添加lazy-apps參數。

前提條件

安裝Python探針

  1. 在uWSGI的入口檔案處的第一行添加以下語句以引入Python探針。

    from aliyun.opentelemetry.instrumentation.auto_instrumentation import sitecustomize
  2. 修改uWSGI中應用的載入方式,配置為使用lazy-apps的方式啟動。

    指令形式如下,注意此處無需添加aliyun-instrument命令首碼。

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

樣本設定檔為:

[uwsgi]
http = :8000
wsgi-file = /python-demo/django-demo/myproject/myproject/wsgi.py
callable = application
# 指定 socket 檔案的位置
socket = /python-demo/django-demo/myproject/wsgi.sock
# 設定 socket 檔案的許可權
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的效果:

  • 全域狀態共用:如果在應用中使用了全域變數,這些變數將在所有背景工作處理序中共用,可能會導致不可預測的行為。

  • 啟動速度:由於所有背景工作處理序在主進程啟動時就載入應用,因此整體啟動速度可能會相對快一些。尤其是在啟動大量背景工作處理序時,可能會比每個進程逐個載入應用要快。

  • 代碼更改的即時性:如果在沒有使用lazy-apps的情況下更改了代碼,需要重啟整個uWSGI進程才能使更改生效,而不只是重啟單個背景工作處理序。