01-1. Gunicorn 是什麼 ⏱️ 閱讀時間: 5 分鐘
🎯 難度: ⭐ (超級簡單)
🤔 一句話解釋 Gunicorn 就是一個「服務器管家」,幫你的 Django 應用接待客人(處理網頁請求)。
🏠 用餐廳來比喻 你的 Django 應用 = 廚房 # views.py (你的廚房) def make_pizza(request): pizza = Pizza.objects.create( size='large', toppings=['cheese', 'pepperoni'] ) return JsonResponse({'pizza_id': pizza.id})這個廚房會做披薩(處理請求),但是:
❌ 廚房不會自己接待客人 ❌ 廚房不知道外面有多少客人在等 ❌ 廚房一次只能做一個披薩 Gunicorn = 餐廳經理 gunicorn myproject.wsgi:application --workers 4Gunicorn 做的事情:
✅ 在門口接待客人(接收網頁請求) ✅ 分配給不同的廚師(4 個 workers) ✅ 管理整個餐廳的運作 ✅ 如果有廚師累倒了,找新的廚師頂替 📊 視覺化理解 沒有 Gunicorn(開發環境) 用戶請求 1 → Django runserver → 等待.
Yoru Karu Studio
程式設計學習筆記 | 生活心得程式設計學習筆記 | 生活心得
01-2. 為什麼需要 Gunicorn ⏱️ 閱讀時間: 5 分鐘 🎯 難度: ⭐ (超級簡單)
💡 2025 年更新:關於 ASGI 在開始之前,先了解兩種方案:
方案 適用對象 說明 ASGI (Uvicorn) 🆕 Django 3.0+ 新專案 Python 官方異步標準,推薦新專案使用 WSGI (Gunicorn) Django < 3.0 或舊專案 成熟穩定,本系列文章主要介紹此方案 # 新專案推薦(Django 3.0+) pip install uvicorn[standard] uvicorn myproject.asgi:application --workers 4 # 舊專案或 WSGI 應用(本文重點) pip install gunicorn gunicorn myproject.wsgi:application --workers 4本系列文章專注於 Gunicorn (WSGI),適合:
維護現有的 Django 專案 學習 WSGI 服務器的工作原理 理解 Workers 的核心概念(也適用於 ASGI) 🎯 本篇重點 理解為什麼 Django 自帶的 runserver 不夠用,必須要用生產級服務器(Gunicorn 或 Uvicorn)。
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.
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 個並發特點: