gunicorn 簡介


gunicorn是一個python Wsgi http server,只支持在Unix系統上運行,來源於Ruby的unicorn項目。Gunicorn使用prefork master-worker模型(在gunicorn中,master被稱為arbiter),能夠與各種wsgi web框架協作。gunicorn的文檔是比較完善的,這里也有部分中文翻譯,不過還是建議直接讀英文文檔。筆者並沒有在項目中真正使用過gunicorn,閱讀其源碼只要是為了了解其master worker模型,如有紕漏,還請多多指教。

 
  gunicorn的安裝非常簡單,pip install guncorn 即可。后續如果用到異步的worker模型,還需要安裝對應的模塊(如gevent)
  在裝好gunicorn之后, 我們來看看gunicorn的hello world。代碼來自官網,將下面的代碼放到gunicorn_app.py中:
  
復制代碼
1     def app(environ, start_response):
2         data = b"Hello, World!\n"
3         start_response("200 OK", [
4             ("Content-Type", "text/plain"),
5             ("Content-Length", str(len(data)))
6         ])
7  
8         return iter([data])
復制代碼

 

  可以看到app是非常標准的wsgi應用,然后我們啟動gunicorn:gunicorn -w 2 gunicorn_app:app。 輸出如下:

  

  上圖展示了兩個很重要的信息:
   第一:啟動了兩個worker,這是通過"-w 2"指定(默認為1)
   第二:worker的工作模型是sync(默認),后面會詳細介紹worker模型
 
  然后在另外一個terminal運行:ps -ef | grep python 
  
  可以看出 worker進程(pid:19469, 19470)是master進程(pid:19464)的子進程。
 
  新起一個terminal,用curl測試:  curl 127.0.0.1:8000
  在該terminal輸出“Hello, World!”


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM