1. 程式人生 > >部署Django部落格全記錄之Gunicorn篇(二)

部署Django部落格全記錄之Gunicorn篇(二)

什麼是Gunicorn

  • Gunicorn是一個被廣泛使用的高效能的Python WSGI UNIX HTTP伺服器,移植自Ruby的獨角獸(Unicorn )專案,使用pre-fork worker模式,具有使用非常簡單,輕量級的資源消耗,以及高效能等特點。

為什麼使用Gunicorn,而不使用uWSGI

  • Gunicorn是使用Python實現的WSGI伺服器, 直接提供了http服務, 並且在woker上提供了多種選擇, gevent, eventlet這些都支援, 在多worker最大化裡用CPU的同時, 還可以使用協程來提供併發支撐, 對於網路IO密集的服務比較有利。
  • 不同於Gunicorn, uWSGI是使用C寫的, 它的socket fd建立, worker程序的啟動都是使用C語言系統介面來實現的, 在worker程序處理迴圈中, 解析了http請求後, 使用python的C介面生成environ物件, 再把這個物件作為引數塞到暴露出來的WSGI application函式中呼叫. 而這一切都是在C程式中進行, 只是在處理請求的時候交給python虛擬機器呼叫application. 完全使用C語言實現的好處是效能會好一些
  • 更多細節

Gunicorn執行與配置

$ sudo apt-get update
$ sudo apt-get install gunicorn
$ gunicorn [OPTIONS] 模組名:變數名
eg:gunicorn --bind unix:/tmp/morso.space.socket  blogproject.wsgi:application
//模組名是python檔名,可以是完整的路徑+python檔名;變數名是python檔案中可呼叫的WSGI(Web Server Gateway )
  • 常用配置引數
  1. 指定一個配置檔案(py檔案)
    -c CONFIG, --config=CONFIG
  2. 與指定socket進行繫結
    -b BIND, --bind=BIND
  3. 以守護程序形式來執行Gunicorn程序,其實就是將這個服務放到後臺去執行。
    -D, --daemon
  4. 工作程序的數量。上邊提到gunicorn是一個pre-fork worker模式,就是指gunicorn啟動的時候,在主程序中會預先fork出指定數量的worker程序在處理請求時,gunicorn依靠作業系統來提供負載均衡,通常推薦的worker數量是:(2 x $num_cores) + 1
    -w WORKERS, --workers=WORKERS
  5. 工作程序型別. 包括 sync(預設), eventlet, gevent, or tornado, gthread, gaiohttp
    -k WORKERCLASS, --worker-class=WORKERCLASS
  6. 確認要寫入Error log的檔案FILE. ‘-’ 表示輸出到標準錯誤輸出
    --access-logfile FILE
  7. 確認要寫入Access log的檔案FILE. ‘-’ 表示輸出到標準輸出.
    --error-logfile FILE, --log-file FILE