uWSGI是一個(gè)Web應(yīng)用服務(wù)器,它具有應(yīng)用服務(wù)器,代理,進(jìn)程管理及應(yīng)用監(jiān)控等功能。它支持WSGI協(xié)議,同時(shí)它也支持自有的uWSGI協(xié)議,該協(xié)議據(jù)說(shuō)性能非常高,而且內(nèi)存占用率低,為mod_wsgi的一半左右,我沒(méi)有實(shí)測(cè)過(guò)。它還支持多應(yīng)用的管理及應(yīng)用的性能監(jiān)控。雖然uWSGI本身就可以直接用來(lái)當(dāng)Web服務(wù)器,但一般建議將其作為應(yīng)用服務(wù)器配合Nginx一起使用,這樣可以更好的發(fā)揮Nginx在Web端的強(qiáng)大功能。本文我們就來(lái)介紹如何搭建uWSGI+Ngnix環(huán)境來(lái)運(yùn)行Python應(yīng)用。
安裝uWSGI
pip install uwsgi
讓我們來(lái)寫(xiě)個(gè)Hello World的WSGI應(yīng)用,并保存在”server.py”文件中:
def application(environ, start_response):  status = '200 OK'  output = 'Hello World!'   response_headers = [('Content-type', 'text/plain'),            ('Content-Length', str(len(output)))]  start_response(status, response_headers)   return [output]讓我們?cè)趗WSGI中運(yùn)行它,執(zhí)行命令:
uwsgi --http :9090 --wsgi-file server.py
然后打開(kāi)瀏覽器,訪問(wèn)”http://localhost:9090″,你就可以看到”Hello World!”字樣了。
上面的命令中”- -http”參數(shù)指定了HTTP監(jiān)聽(tīng)地址和端口,”- -wsgi-file”參數(shù)指定了WSGI應(yīng)用程序入口,uWSGI會(huì)自動(dòng)搜尋名為”application”的應(yīng)用對(duì)象并調(diào)用它。
更進(jìn)一步,uWSGI可以支持多進(jìn)程和多線程的方式啟動(dòng)應(yīng)用,也可以監(jiān)控應(yīng)用的運(yùn)行狀態(tài)。我們將啟動(dòng)的命令改為:
 代碼如下:
$ uwsgi --http :9090 --wsgi-file server.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
執(zhí)行它后,uWSGI將啟動(dòng)4個(gè)應(yīng)用進(jìn)程,每個(gè)進(jìn)程有2個(gè)線程,和一個(gè)master主進(jìn)程(監(jiān)控其他進(jìn)程狀態(tài),如果有進(jìn)程死了,則重啟)。同時(shí),你可以訪問(wèn)”127.0.0.1:9191″來(lái)獲取JSON格式的應(yīng)用運(yùn)行信息,uWSGI還提供了工具命令”uwsgitop”來(lái)像top一樣監(jiān)控應(yīng)用運(yùn)行狀態(tài),你可以用pip來(lái)安裝它。
上面的命令參數(shù)太多了,我們可以將參數(shù)寫(xiě)在配置文件里,啟動(dòng)uWSGI時(shí)指定配置文件即可。配置文件可以是鍵值對(duì)的格式,也可以是XML,YAML格式,這里我們使用鍵值對(duì)的格式。讓我們創(chuàng)建一個(gè)配置文件”myapp.ini”:
[uwsgi]http=:9090wsgi-file=server.pymaster=trueprocesses=4threads=2stats=127.0.0.1:9191
然后就可以將啟動(dòng)命令簡(jiǎn)化為:
$ uwsgi myapp.ini
配置Nginx
Nginx的安裝可以參考這篇文章,文本采用的環(huán)境就是Ubuntu Linux,對(duì)于其他系統(tǒng)如Mac,基本上差不太多
首先,我們將uWSGI的HTTP端口監(jiān)聽(tīng)改為socket端口監(jiān)聽(tīng),即將配置文件中的”http”項(xiàng)去掉,改為”socket”項(xiàng):
[uwsgi]socket=127.0.0.1:3031wsgi-file=server.pymaster=trueprocesses=4threads=2stats=127.0.0.1:9191
新聞熱點(diǎn)
疑難解答
圖片精選