這兩天在準備ppt,里面有涉及到WSGI的應該用,以前自己在51cto寫過關(guān)于gunicorn的文章,所以就轉(zhuǎn)了過來。那么不扯淡了。 其實比如 Flask,webpy,Django、CherryPy 都帶著 WSGI server 。當然性能都不好,自帶的web server 更多的是測試用途, 線上發(fā)布時,則使用高性能的 wsgi server或者是聯(lián)合nginx做uwsgi 。
誠如那個WSGI的定義所說的,協(xié)議定義了一套接口來實現(xiàn)服務器端與應用端通信的規(guī)范化(或者說是統(tǒng)一化)。這是怎樣的一套接口呢?很簡單,尤其是對于應用端。
神器 Gunicorn是一個Python WSGI UNIX的HTTP服務器。這是一個預先叉工人模式,從Ruby的獨角獸(Unicorn)項目移植。該Gunicorn服務器與各種Web框架兼容,我們只要簡單配置執(zhí)行,輕量級的資源消耗,以及相當迅速。它的特點是與各個web結(jié)合緊密,部署特別方便。
那么首先安裝 gunicorn ~
這里我們說下 gunicorn 的用法,最簡單的運行方式就是:
其中code就是指code.py,application就是那個wsgifunc的名字。
這樣運行的話, gunicorn 默認作為一個監(jiān)聽 127.0.0.1:8000 的web server,可以在本機通過: http://127.0.0.1:8000 訪問。
如果要通過網(wǎng)絡訪問,則需要綁定不同的地址(也可以同時設置監(jiān)聽端口):
在多核服務器上,為了支持更多的并發(fā)訪問并充分利用資源,可以使用更多的 gunicorn 進程:
這樣就可以啟動8個進程同時處理HTTP請求,提高系統(tǒng)的使用效率及性能。
另外, gunicorn 默認使用同步阻塞的網(wǎng)絡模型(-k sync),對于大并發(fā)的訪問可能表現(xiàn)不夠好, 它還支持其它更好的模式,比如:gevent或meinheld。 # gevent gunicorn -k gevent code:application # meinheld gunicorn -k egg:meinheld#gunicorn_worker code:application 當然,要使用這兩個東西需要另外安裝,具體請參考各自的文檔。
以上設置還可以通過 -c 參數(shù)傳入一個配置文件實現(xiàn)。
gunicorn 的配置文件
這里使用FLask簡單寫了一個web例子
單實例測試下,首先先用單純的flask 自帶的web服務器做下測試,會看到壓力大的時候出現(xiàn)socket的問題,因為他是單進程單線程的
那接著,咱們使用gunicorn來啟動。
用flask做測試的時候,2000個連接用了將近6秒左右,這次用gunicorn達到了2.4秒左右。。。。。 這速度對比,已經(jīng)很明了了~
event wsgi的配置,我先簡單的做下配置。。。。 大家想看實例的話,可以去gevent的官網(wǎng)的wsgi的demo 那邊還附有編程的接口。。。
另外提一下,uwsgi現(xiàn)在也支持gevent的方式。
上面是gunicorn常用的架構(gòu),前端Nginx負載,幾個核就跑幾個Gunicorn進程,gunicorn相對后面的app又可以給出幾個進程。
比起uWSGI來說,Gunicorn對于“協(xié)程”也就是Gevent的支持會更好更完美。
|
|
來自: 昵稱54185769 > 《待分類》