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 4

Gunicorn 做的事情:

  • ✅ 在門口接待客人(接收網頁請求)
  • ✅ 分配給不同的廚師(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 是什麼?

  1. 服務器管家:管理 Django 應用的運行
  2. 多工處理:同時處理多個請求
  3. 生產環境必備:正式網站一定要用

為什麼需要它?

Django runserverGunicorn
一次處理 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 是什麼了!下一篇我們會學:

01-2. 為什麼需要 Gunicorn

  • Django runserver 的問題
  • Gunicorn 解決了什麼問題
  • 生產環境的完整架構

🤓 小測驗

測試一下你有沒有理解:

  1. Gunicorn 是做什麼的?

  2. Django runserver 可以用在正式網站嗎?

  3. 如何啟動 Gunicorn?


上一篇: 目錄
下一篇: 01-2. 為什麼需要 Gunicorn


最後更新:2025-10-30

0%