Gunicorn 簡明教程
Gunicorn是Python下的一個WSGI伺服器,聽起來很普通,不過因為它支援很多特性,在 Python界還是很流行,例如作為起Flask的父程序,支援用gevent把Flask打個patch等。
它使用的是pre-fork的模式,即啟動的時候fork出n個程序,然後master程序負責監聽 訊號和子程序,如果子程序掛了,那麼master會拉一個新的起來,如果有對應訊號, master會發起相應的動作。
Gunicorn的選項從三個地方讀取:
-c <path/to/configuration>
順序是從上往下,優先順序遞增。
詳細的配置都在這裡:ofollow,noindex" target="_blank">http://docs.gunicorn.org/en/stable/settings.html
一般來說,起一個gunicorn作為伺服器足以,但是有時候我們可以在Gunicorn前面擋一個 Nginx,原因如下:
- Nginx可以快取住請求,然後內網再次發起請求,並且可以配置負載均衡,如果一臺機器 的多程序(Gunicorn就是多程序)吃不消的情況下,負載均衡可以把請求打向多個機器
- Nginx替代Python處理靜態檔案的請求,以提高效能
- 很多時候一個機器上可能不止一個服務,需要像Nginx這樣的web伺服器做一次proxy_pass
示例配置檔案:
# coding: utf-8 workers = 2 worker_class = "gevent" max_requests = 1024 daemon = False loglevel = 'info' capture_output = True errorlog = "-" bind = "0.0.0.0:10086"
示例啟動命令:
gunicorn -c gunicorn_config.py main:app
通過gevent打patch實現的協程相比Tornado有以下不同: