中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python Web編程之WSGI協議簡介

發布時間:2020-09-02 04:30:10 來源:腳本之家 閱讀:136 作者:噴跑的豆子 欄目:開發技術

本文實例講述了Python Web編程之WSGI協議。分享給大家供大家參考,具體如下:

WSGI簡介

Web框架和Wen服務器之間需要進行通信,如果在設計時它們之間無法相互匹配,那么對框架的選擇就會限制對Web服務器的選擇,這顯然是不合理的。這時候需要設計一套雙方都遵守的接口。WSGI是Python Web Server Gateway Interface的簡稱。WSGI標準在PEP 333中定義并被許多框架實現,它規定了一種在Web服務器之間具有可移植性。在后來的PEP 3333中添加了Python 3的支持和更多相關的說明。有了通用的WSGI協議,Web開發者就能夠任意選擇適合自己的組合,而Web服務器和Web框架的開發者們也能夠把精力集中到各自的領域。

常見的WSGI容器

WSGI是一個同步接口,所以Tornado的WSGI容器是無法實現異步的。主流的選擇是GunicornuWSGI

Gunicorn

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 Flask
app = 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

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,應該使用–http,它產生一個額外的進程將請求轉發給Workers,如果希望它被反向代理(比如和Nginx一起使用),應該使用–http-socket

合理的進程數和線程數不能簡單的通過CPU * 2來計算得出,需要不斷的嘗試而找到最佳值。

uWSGI命令常用參數如下:

參數名 含義
–http 協議類型和端口號
–processes 開啟的進程數量
–callable uWSGI加載的模塊哪個變量將被調用
–workers 開啟的進行數量,等同于processes
–chdir 指定運行目錄
–wsgi-file 載入wsgi-file(加載wsgi.py文件)
–stats 在指定的地址上開啟狀態服務
–threads 開啟的線程數量
–master 允許主進程存在
–daemonize 使進程在后臺運行,并將日志輸出到指定的日志文件或者UDP服務器
–pidfile 指定PID文件的位置,記錄主進程的PID號
–vacuum 當服務器退出時自動清理環境,刪除Unix Socket文件和PID文件

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python Socket編程技巧總結》、《Python URL操作技巧總結》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經典教程》

希望本文所述對大家Python程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

怀宁县| 忻州市| 晋江市| 留坝县| 阿克陶县| 米脂县| 宝丰县| 大兴区| 类乌齐县| 南岸区| 台南县| 沐川县| 穆棱市| 丹巴县| 托克托县| 衡东县| 凤冈县| 嵊泗县| 清远市| 布拖县| 宝坻区| 如皋市| 五河县| 嘉禾县| 马山县| 招远市| 邹城市| 锦屏县| 天峨县| 铜鼓县| 南平市| 尚志市| 额济纳旗| 咸阳市| 涡阳县| 河间市| 拉孜县| 芜湖县| 潞西市| 孝义市| 宝丰县|