01-5. Gevent Worker 詳解 ⏱️ 閱讀時間: 10 分鐘 🎯 難度: ⭐⭐⭐ (中等)
⚠️ 重要提醒:技術定位 Gevent 是一個成熟但相對過時的技術,主要用於維護舊專案或 WSGI 應用的過渡階段。
現代 Python 異步方案 新專案應該優先考慮:
ASGI + Uvicorn/Daphne:Python 官方的異步標準 Django 3.0+ async views:Django 原生 async/await 支持 FastAPI:現代異步 Web 框架 # 現代方案(推薦) pip install uvicorn uvicorn myproject.asgi:application --workers 4 # Gevent 方案(舊專案維護) pip install gunicorn gevent gunicorn myproject.wsgi:application --worker-class gevent何時使用 Gevent? ✅ 適合使用:
維護舊的 WSGI Django 專案 暫時無法遷移到 ASGI 的專案 需要快速提升舊應用的並發能力 ❌ 不建議使用:
新專案:直接用 ASGI + asyncio Django 3.
Yoru Karu Studio
程式設計學習筆記 | 生活心得程式設計學習筆記 | 生活心得
01-6. Gthread Worker 詳解 ⏱️ 閱讀時間: 10 分鐘
🎯 難度: ⭐⭐ (簡單)
🎯 本篇重點 理解 Gthread Worker 如何結合進程與線程的優勢,適合混合型任務。
🤔 什麼是 Gthread Worker? 一句話解釋 Gthread Worker = 每個 Worker 進程內有多個線程,可以同時處理多個請求。
🏢 用公司來比喻 Sync Worker = 一人辦公室 辦公室 1 (Worker 1) └── 員工 A(一次處理一個任務) 辦公室 2 (Worker 2) └── 員工 B(一次處理一個任務)Gevent Worker = 超人辦公室 辦公室 1 (Worker 1) └── 超人員工(同時處理 1000 個任務,靠快速切換)Gthread Worker = 團隊辦公室 辦公室 1 (Worker 1) ├── 員工 A(處理任務 1) └── 員工 B(處理任務 2) 辦公室 2 (Worker 2) ├── 員工 C(處理任務 3) └── 員工 D(處理任務 4) 4 個 Workers × 2 個 Threads = 8 個並發特點:
01-7. Worker 如何選擇 ⏱️ 閱讀時間: 8 分鐘 🎯 難度: ⭐⭐⭐ (重要!面試必考)
🎯 本篇重點 這是基礎篇最重要的一篇!學會如何根據應用特性選擇正確的 Worker 類型。
⚠️ 新專案?先看這裡! 如果你正在開始一個新的 Django 專案(Django 3.0+),強烈建議直接使用現代的 ASGI 方案:
# 現代推薦方案(新專案) pip install uvicorn[standard] # 開發環境 uvicorn myproject.asgi:application --reload # 生產環境 uvicorn myproject.asgi:application --workers 4 --host 0.0.0.0 --port 8000為什麼?
✅ Python 官方異步標準(asyncio) ✅ Django 3.0+ 原生支持 async views ✅ 更好的生態系統和長期支持 ✅ 不需要 Monkey Patching ✅ 更清晰的 async/await 語法 本篇討論的 Gunicorn Workers 主要適用於:
維護舊的 WSGI Django 專案(Django < 3.
01-8. 現代方案:Gunicorn + Uvicorn Workers ⏱️ 閱讀時間: 12 分鐘 🎯 難度: ⭐⭐⭐ (中等) 🆕 狀態: 新專案推薦方案
🎯 本篇重點 學習現代 Django 專案(Django 3.0+)的最佳部署方案:使用 Gunicorn 管理 Uvicorn Workers。
🆕 為什麼是 Gunicorn + Uvicorn Workers? 傳統 vs 現代方案對比 # ❌ 傳統方案(WSGI) gunicorn myproject.wsgi:application \ --workers 4 \ --worker-class sync # ⚠️ 單純 Uvicorn(不推薦生產環境) uvicorn myproject.asgi:application \ --workers 4 # ✅ 現代最佳方案(ASGI + Gunicorn 管理) gunicorn myproject.asgi:application \ --workers 4 \ --worker-class uvicorn.workers.UvicornWorker為什麼不直接用 Uvicorn? Uvicorn 的限制:
02-1. Workers 數量計算 ⏱️ 閱讀時間: 10 分鐘
🎯 難度: ⭐⭐⭐ (重要!面試必考)
🎯 本篇重點 學會如何科學地計算和設定 Workers 數量,這是 Gunicorn 配置中最重要的參數。
📐 經典公式 最常見的公式 workers = (2 × CPU_cores) + 1例子:
# 4 核 CPU workers = (2 × 4) + 1 = 9 # 8 核 CPU workers = (2 × 8) + 1 = 17 # 2 核 CPU workers = (2 × 2) + 1 = 5 這個公式的由來 為什麼是 2 × CPU? 假設 4 核 CPU,workers = 9: ├── 4 個 workers:正在使用 CPU(計算) ├── 4 個 workers:正在等待 I/O(資料庫、網絡) └── 1 個 worker:緩衝(應對突發流量) 當 Worker A 在等待 I/O 時: → CPU 空閒 → Worker B 可以使用 CPU → CPU 永遠有事做 ✅視覺化:
02-2. 基礎配置參數 ⏱️ 閱讀時間: 10 分鐘 🎯 難度: ⭐⭐ (簡單)
🎯 本篇重點 掌握 Gunicorn 最重要的基礎配置參數:timeout、keepalive、max_requests、backlog 等。
📋 核心配置參數總覽 最重要的 5 個參數 參數 作用 默認值 推薦值 timeout Worker 超時時間 30 秒 30-120 秒 keepalive Keep-alive 超時 2 秒 2-10 秒 max_requests Worker 重啟閾值 0(不重啟) 1000-2000 backlog 等待連接隊列 2048 2048-4096 worker_connections Worker 並發連接數 1000 1000-10000 ⏱️ timeout(超時時間) 什麼是 timeout? Worker 處理單個請求的最大時間。超過這個時間,Master 會殺掉 Worker 並重啟。
工作原理 請求到達 Worker ↓ 開始計時(timeout 開始) ↓ 處理請求... ↓ ├─ 30 秒內完成 → ✅ 正常返回 └─ 超過 30 秒 → ❌ Worker 被殺掉 → 💥 502 錯誤配置方式 # gunicorn.