目錄
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 → 等待...
用戶請求 2 → (必須等請求1處理完)
用戶請求 3 → (繼續等...)問題: 一次只能處理一個請求,其他人都要等!
有 Gunicorn(生產環境)
┌─→ Worker 1 → 處理請求 A
│
用戶請求 → Nginx → Gunicorn ─┼─→ Worker 2 → 處理請求 B
│
├─→ Worker 3 → 處理請求 C
│
└─→ Worker 4 → 處理請求 D優點: 可以同時處理多個請求!
💻 實際例子
開發環境(不用 Gunicorn)
# 開發時用這個
python manage.py runserver
# 輸出:
# Starting development server at http://127.0.0.1:8000/
# Quit the server with CONTROL-C.特點:
- 🎯 方便開發測試
- ⚠️ 只能一次處理一個請求
- ❌ 絕對不能用在正式網站!
生產環境(用 Gunicorn)
# 正式網站用這個
gunicorn myproject.wsgi:application --workers 4
# 輸出:
# [2025-10-30 10:00:00] [12345] [INFO] Starting gunicorn 21.2.0
# [2025-10-30 10:00:00] [12345] [INFO] Listening at: http://0.0.0.0:8000
# [2025-10-30 10:00:00] [12346] [INFO] Booting worker with pid: 12346
# [2025-10-30 10:00:00] [12347] [INFO] Booting worker with pid: 12347
# [2025-10-30 10:00:00] [12348] [INFO] Booting worker with pid: 12348
# [2025-10-30 10:00:00] [12349] [INFO] Booting worker with pid: 12349特點:
- 🎯 可以處理大量請求
- 🎯 4 個 workers = 同時處理 4 個請求
- 🎯 worker 掛掉會自動重啟
- ✅ 正式網站必備!
🎯 為什麼叫 Gunicorn?
Green Unicorn(綠色獨角獸)
- Green = 使用 Python 的 greenlet(輕量級協程)
- Unicorn = 來自 Ruby 的 Unicorn 服務器(靈感來源)
📦 安裝 Gunicorn
超級簡單,一行指令:
pip install gunicorn🚀 最簡單的使用方式
假設你的 Django 項目結構是:
myproject/
├── myproject/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py ← 重點是這個檔案
├── manage.py
└── requirements.txt啟動 Gunicorn:
# 格式:gunicorn 項目名.wsgi:application
gunicorn myproject.wsgi:application就這麼簡單!
🔍 Gunicorn 做了什麼?
1. 讀取你的 Django 設定
# wsgi.py
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_wsgi_application() ← Gunicorn 會呼叫這個2. 啟動多個 Workers
Master Process (主管)
├── Worker 1 (員工)
├── Worker 2 (員工)
├── Worker 3 (員工)
└── Worker 4 (員工)3. 分配請求給 Workers
當有人訪問你的網站:
1. Gunicorn 接收請求
2. 找一個空閒的 Worker
3. Worker 呼叫你的 Django view
4. 處理完後回傳給用戶✅ 重點總結
Gunicorn 是什麼?
- 服務器管家:管理 Django 應用的運行
- 多工處理:同時處理多個請求
- 生產環境必備:正式網站一定要用
為什麼需要它?
| Django runserver | Gunicorn |
|---|---|
| 一次處理 1 個請求 | 同時處理多個請求 |
| 開發用 | 生產環境用 |
| 不穩定 | 穩定可靠 |
| 沒有自動重啟 | 自動重啟掛掉的 worker |
最簡單的使用
# 1. 安裝
pip install gunicorn
# 2. 啟動
gunicorn myproject.wsgi:application🎤 面試可能會問
Q: Gunicorn 是什麼?
答案:
Gunicorn 是一個 WSGI HTTP Server,用於在生產環境運行 Django 應用。它可以啟動多個 worker 進程來同時處理多個請求,提供比 Django 內置服務器更好的性能和穩定性。
Q: 為什麼不能用 python manage.py runserver 在生產環境?
答案:
因為 Django 的 runserver 是單線程的開發服務器,一次只能處理一個請求,而且不夠穩定,官方文檔明確說明不適合生產環境。生產環境需要使用像 Gunicorn 這樣的 WSGI Server 來處理並發請求。
📚 接下來
現在你知道 Gunicorn 是什麼了!下一篇我們會學:
- Django runserver 的問題
- Gunicorn 解決了什麼問題
- 生產環境的完整架構
🤓 小測驗
測試一下你有沒有理解:
Gunicorn 是做什麼的?
Django runserver 可以用在正式網站嗎?
如何啟動 Gunicorn?
上一篇: 目錄
下一篇: 01-2. 為什麼需要 Gunicorn
最後更新:2025-10-30