本文實例講述了Python Web編程之WSGI協議。分享給大家供大家參考,具體如下:
Web框架和Wen服務器之間需要進行通信,如果在設計時它們之間無法相互匹配,那么對框架的選擇就會限制對Web服務器的選擇,這顯然是不合理的。這時候需要設計一套雙方都遵守的接口。WSGI是Python Web Server Gateway Interface的簡稱。WSGI標準在PEP 333中定義并被許多框架實現,它規定了一種在Web服務器之間具有可移植性。在后來的PEP 3333中添加了Python 3的支持和更多相關的說明。有了通用的WSGI協議,Web開發者就能夠任意選擇適合自己的組合,而Web服務器和Web框架的開發者們也能夠把精力集中到各自的領域。
WSGI是一個同步接口,所以Tornado的WSGI容器是無法實現異步的。主流的選擇是Gunicorn和uWSGI。
Gunicorn易于配置,兼容性好,CPU消耗很少,在豆瓣使用廣泛。它支持多種Worker模式,推薦的模式有如如下幾種:
同步Worker:默認模式,也就是一次只處理一個請求 異步Worker:通過Eventlet、Gevent實現的異步模式 異步IO Worker:目前支持gthread和gaiohttp兩種類型安裝Gunicorn:
pip install gunicorn
Gunicorn的啟動非常簡單,語法如下:
gunicorn [OPTIONS] MODULE_NAME:VARIABLE_NAME
舉個栗子,manager.py:
from flask import Flaskapp = Flask(__name__)@app.route("/")def hello_world(): return "Hello World"if __name__ == "__main__": app.run()
啟動應用:
gunicorn manager:app -b 0.0.0.0:9000
亦或者指定Worker數量啟動:
gunicorn --workers=3 manager:app -b 0.0.0.0:9000
app為Flask實例的名稱,Worker的數量推薦值是CPU的個數*2+1,CPU個數使用如下的方式獲取:
python -c 'import multiprocessing; print multiprocessing.cpu_count()'
uWSGI是使用C編寫的,顯示了自有的uwsgi協議的Web服務器。它自帶豐富的組件,其中核心組件包含進程管理、監控、IPC等功能,實現應用服務器接口的請求插件支持多種語言和平臺,比如WSGI、Rack、Lua WSAPI,網管組件實現了負載均衡、代理和理由功能。
安裝uWSGI
pip install uwsgi
使用uWSGI啟動應用:
代碼如下:uwsgi --http 0.0.0.0:9000 --wsgi-file manager.py --callable app --processes 4 --threads 2 --stats 0.0.0.0:5000
上面的命令表示啟動了4個進程,每個進程使用2個線程,而且開啟了5000的Web接口,返回監控uWSGI的信息,一級不同進程和線程的詳細使用情況。使用uWSGI有兩點十分重要:
–http-socket
和–http
其實是完全不同的兩個選項。如果想直接裸跑uWSGI,應該使用
新聞熱點
疑難解答