部署Django部落格全記錄之Gunicorn篇(二)
阿新 • • 發佈:2018-12-23
什麼是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 )
- 常用配置引數
- 指定一個配置檔案(py檔案)
-c CONFIG, --config=CONFIG
- 與指定socket進行繫結
-b BIND, --bind=BIND
- 以守護程序形式來執行Gunicorn程序,其實就是將這個服務放到後臺去執行。
-D, --daemon
- 工作程序的數量。上邊提到gunicorn是一個pre-fork worker模式,就是指gunicorn啟動的時候,在主程序中會預先fork出指定數量的worker程序在處理請求時,gunicorn依靠作業系統來提供負載均衡,通常推薦的worker數量是:(2 x $num_cores) + 1
-w WORKERS, --workers=WORKERS
- 工作程序型別. 包括 sync(預設), eventlet, gevent, or tornado, gthread, gaiohttp
-k WORKERCLASS, --worker-class=WORKERCLASS
- 確認要寫入Error log的檔案FILE. ‘-’ 表示輸出到標準錯誤輸出
--access-logfile FILE
- 確認要寫入Access log的檔案FILE. ‘-’ 表示輸出到標準輸出.
--error-logfile FILE, --log-file FILE
- 部分參考自gunicorn學習介紹