python web 部署的那點事

開發python web的人都知道,我們python是自帶web模塊的,也就是說我們可以不使用其它任何web服務器,就可以直接訪問我們的web應用,但是實際生產環境我們很少這麼做,這是為什麼呢?生產環境我們又如何部署我們的python項目呢?

wsgi

wsgi的英文全稱是web server gateway interface,翻譯過來就是服務器網關接口。這個是什麼東西,如果你接觸過web開發,應該知道一個叫做cgi的東西,我們使用c語言進行web開發的時候,就會使用cgi來進行數據獲取的,也就是說CGI是一個Web服務器主機提供信息服務的標準接口,通過它我們可以獲取到客戶端,服務器端等信息,比如客戶的IP地址,服務器的IP地址等信息。

我們的WSGI和CGI類似,但是比CGI相對高級一些,因為CGI更多是同IO打交道,而WSGI更多的是提供一個web服務器和python應用程序之間的一個橋樑。有了這個橋樑,我們可以進行一些比如壓縮,代理,負載均衡等操作,並且有了它之後,我們可以將更多地精力投入在應用程序的業務邏輯開發上,而部署的時候,我們的應用程序都是實現wsgi這個接口的,直接部署即可。


python web 部署的那點事

uWSGI

uWSGI是一個應用程序容器。它既可以運行支持wsgi接口的Python應用程序,也可以運行支持PSGI接口的Perl程序,當然實現Rack interface協議的Ruby程序也可以運行。

python web 部署的那點事

python中我們可以使用--http參數啟動uWSGI,它以充當WSGI應用程序的Web服務器。但是此Web服務器功能很少,生產中我們更多使用Nginx或Apache這類完整功能的Web服務器。

python web 部署的那點事

uWSGI實現了一種稱為uwsgi的快速二進制協議用來接受HTTP請求。新版的Nginx支持uwsgi協議,因此我們經常使用nginx+uWSGI來部署python web應用。

uwsgi

uwsgi是一種協議,它主要是用來為uWSG服務器來服務的。因為它是二進制的,所以它支持各種數據類型的傳輸。簡單來說,它也是對cgi的一種二次封裝。

Gunicorn

這是一個類似uWSGI的python web服務器。它的靈感來自於Ruby的Unicorn。同樣,它也是支持多個work工作的。

其它

python中還有很多其它模塊,比如mod_python,mod_wsgi等,不過它們都不是很流行。

總結

所以對於python web項目的部署,我們更多地是使用Gunicorn或者uWSGI配合nginx來使用。可以說nginx作為web服務器真的太強大了,畢竟高性能還是大家共同追求的目標。


分享到:


相關文章: