日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

关于 WSGI、uwsgi和uWSGI的区别及基于 uWSGI和gunicorn 部署python web 简述

發布時間:2025/3/15 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于 WSGI、uwsgi和uWSGI的区别及基于 uWSGI和gunicorn 部署python web 简述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于 WSGI、uwsgi和uWSGI的區別及基于 uWSGI和gunicorn 部署python web 簡述

?

引言

最近基于 Flask Web框架在開發一個后端項目,在Web Server和 Flask 應用程序交互的過程中總會碰到本文題目提及到WSGI、uwsgi和uWSGI這幾個概念,整理如下。

WSGI

英文全稱:Web Server Gateway Interface,Web服務網管接口,簡單來說它是一種Web服務器和應用程序間的通信規范。

uwsgi

uwsgi是一種通信協議,不過跟WSGI分屬兩種東西,該協議下速度比較快。

uWSGI

uWSGI是一個Web Server,并且獨占uwsgi協議,但是同時支持WSGI協議、HTTP協議等,它的功能是把HTTP協議轉化成語言支持的網絡協議供python使用。

?

雖然 Flask 非常容易上手,它自帶的app.run(host="0.0.0.0", port=7001)用來調試非常方便,但是用于生產環境無論是處理高并發還是魯棒性都有所欠缺,一般會配合WGSI容器來進行[生產環境的部署]

?

uWSGI的使用

在做Django項目時,一般測試開發我們直接用Django內嵌的Web Server即可,但是如果項目要上生產環境,考慮并發等性能時,我們可能需要uwsgi和nginx,下面只說明uwsgi的常用用法,至于nginx的配置筆者后續準備專門寫一篇博文來講。

1. 安裝

?

pip install uwsgi

2. 配置

uwsgi執行一般有兩種方式:命令行和文件配置,但是命令行可能需要識記很多參數,因此采用文件配置是更通用的做法,文件格式支持很多種比如ini、xml、yaml等,筆者建議還是采用比較簡單key-value形式ini模式,下面給出一個簡單的uwsgi ini配置實例:

?

[uwsgi] socket = 127.0.0.1:8001 master = false chdir = /var/www/cmpvirtmgr/ module = cmpvirtmgr.wsgi home = /var/www/env workers = 2 reload-mercy = 10 vacuum = true max-requests = 1000 limit-as = 512 buffer-size = 30000 pidfile = /etc/uwsgi/uwsgi.pid

執行:uwsgi --ini /path/to/uwsgi.ini

參數解釋:

  • socket:socket文件,也可以是地址+端口;
  • master:是否啟動主進程來管理其他進程;
  • chdir:項目的根目錄;
  • module:wsgi文件相對路徑;
  • home:虛擬環境目錄;
  • workers:開啟的進程數量;
  • reload-mercy:設置在平滑的重啟(直到接收到的請求處理完才重啟)一個工作子進程中,等待這個工作結束的最長秒數;
  • vacuum:服務結束后時候刪除對應的socket和pid文件;
  • max_requests:每個工作進程設置的請求上限;
  • limit_as:限制每個uwsgi進程占用的虛擬內存數目;
  • buffer_size:設置用于uwsgi包解析的內部緩存區大小;
  • pid_file:指定pid文件;
  • harakiri:請求的超時時間;
  • daemonize:進程后臺執行,并保存日志到特定路徑;如果uwsgi進程被supervisor管理,不能設置該參數;

更多uwsgi參數可參考官方文檔:https://uwsgi-docs.readthedocs.io/en/latest/


使用gunicorn部署flask項目

?

1、WSGI協議

Web框架致力于如何生成HTML代碼或生成基于 Restful 的 API 接口數據,而Web服務器用于處理和響應HTTP請求。Web框架和Web服務器之間的通信,需要一套雙方都遵守的接口協議。WSGI協議就是用來統一這兩者的接口的。

2、WSGI容器

常用的WSGI容器有Gunicorn和uWSGI,但Gunicorn直接用命令啟動,不需要編寫配置文件,相對uWSGI要容易很多,所以這里我也選擇用Gunicorn作為容器。

3、gunicorn介紹

gunicorn是一個python Wsgi http server,只支持在Unix系統上運行,來源于Ruby的unicorn項目。Gunicorn使用prefork master-worker模型(在gunicorn中,master被稱為arbiter),能夠與各種wsgi web框架協作。

4、gunicorn安裝

gunicorn安裝非常簡單,使用命令pip install gunicorn即可。一般使用它,主要是為使用其異步的worker模型,還需要安裝對應的異步模塊。

$ pip install gunicorn $ pip install greenlet # 使用異步必須安裝 $ pip install eventlet # 使用eventlet workers $ pip install gevent # 使用gevent workers

5、gunicorn使用

這里使用gunicorn來部署一個flask項目舉例,此處flask框架的使用不過多闡述,不是本文的重點。

如下例子,保存為app.py

from flask import Flask app = Flask(__name__)@app.route("/") def hello():return "Hello World!"

gunicorn通常使用的參數如下:

-c CONFIG, --config=CONFIG # 設定配置文件。 -b BIND, --bind=BIND # 設定服務需要綁定的端口。建議使用HOST:PORT。 -w WORKERS, --workers=WORKERS # 設置工作進程數。建議服務器每一個核心可以設置2-4個。 -k MODULE # 選定異步工作方式使用的模塊。

在shell中輸入你的啟動配置,比如:

$ gunicorn -w 3 -b 127.0.0.1:8080 app:app # 此處app:app中,第一個app為flask項目實例所在的啟動模塊,第二個app為生成的flask項目實例

這樣運行正常就可以啟動服務器了。

6、綁定端口

linux通常會禁止綁定使用1024以下的端口,除非在root用戶權限。很多人在使用gunicorn時試圖將其綁定到80或者443端口,發現無效。如果想綁定到這些端口,常見的有如下的幾種方法:

  • 使用Nginx代理轉發。
  • sudo啟動gunicorn。
  • 安裝額外的程序。

7、結束gunicorn服務進程

使用ps -ef | grep gunicorn命令找出gunicorn所有進程。

[root@VM_0_12_centos ~]# ps -ef | grep gunicorn root 16843 23035 0 Oct14 ? 00:00:02 /root/Envs/myflask/bin/python3.6 /root/Envs/myflask/bin/gunicorn -w 3 -b 172.17.0.12:80 app:app root 22445 23035 0 Oct04 ? 00:00:15 /root/Envs/myflask/bin/python3.6 /root/Envs/myflask/bin/gunicorn -w 3 -b 172.17.0.12:80 app:app root 22581 23035 0 Oct11 ? 00:00:05 /root/Envs/myflask/bin/python3.6 /root/Envs/myflask/bin/gunicorn -w 3 -b 172.17.0.12:80 app:app root 23035 1 0 Sep27 ? 00:04:11 /root/Envs/myflask/bin/python3.6 /root/Envs/myflask/bin/gunicorn -w 3 -b 172.17.0.12:80 app:app

然后使用 kill -9 進程ID 命令來殺掉進程,注意,我們找到主進程殺掉即可,子進程會隨之結束,在上例中,主進程號為23035.

[root@VM_0_12_centos ~]# kill -9 23035 [root@VM_0_12_centos ~]# ps -ef | grep gunicorn

殺掉進程后,稍等幾秒,再使用ps -ef | grep gunicorn查看,發現gunicorn服務進程已全部殺掉。

總結

以上是生活随笔為你收集整理的关于 WSGI、uwsgi和uWSGI的区别及基于 uWSGI和gunicorn 部署python web 简述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产网站在线免费观看 | 青青草免费公开视频 | 91麻豆精品国产理伦片在线观看 | a毛片毛片av永久免费 | av片免费观看 | 国产日产久久高清欧美一区 | 99国产精品国产精品九九 | 麻豆理论片 | jizzjizz黄大片| 男女视频国产 | 99精品视频99 | 自拍偷拍第| 日本做爰全过程免费看 | 一级片在线观看免费 | 在线免费观看黄色片 | 久久人人爽人人爽人人片 | 亚洲午夜精品一区二区三区他趣 | 久久久久久一级片 | 激情欧美一区二区三区 | 久久免费在线观看视频 | 农村脱精光一级 | 日本黄视频网站 | 超碰老司机| 免费观看视频在线观看 | 成人免费在线视频观看 | 女同一区二区三区 | 日本少妇喷水视频 | 国产理论一区 | av生活片 | 一道本av在线 | www.av视频在线观看 | 国模大胆一区二区三区 | 屁屁影院一区二区三区 | 高清不卡一区 | 久久精品国产亚洲av成人 | av中文字幕免费在线观看 | 欧美精品一区二区三区四区五区 | 欧美色综合色 | 深夜视频在线免费观看 | 久久久久久电影 | 不卡免费视频 | 91国内在线 | 久久久久久久久久久电影 | www.色妞 | 日本熟妇一区二区三区四区 | 日本免费在线视频 | 91国在线啪 | 五十路六十路七十路熟婆 | 欧美色图网址 | 97精品国产97久久久久久春色 | 好吊视频在线观看 | 老局长的粗大高h | 波多野结衣av无码 | 午夜av免费看| 久久精品无码一区二区三区免费 | 久久精品国产亚洲av久 | 久久乐国产精品 | 成人视屏在线观看 | 日噜| 97视频免费在线观看 | 色综合网站 | 三级性生活片 | 一级黄色a | 男生草女生视频 | 在线久 | av中文在线播放 | 雷电将军和丘丘人繁衍后代视频 | 爱情岛论坛自拍 | 永久在线视频 | 日韩亚射吧 | 国产h视频在线 | 亚洲精品韩国 | 成人三级视频 | 久久精品天堂 | 先锋影音av中文字幕 | 国产中文自拍 | 成人免费公开视频 | 爱福利视频一区 | 欧美性videos高清精品 | 欧美 日韩 国产 一区二区三区 | 亚洲国产精品自拍视频 | 中文字幕91 | 免费看黄色小视频 | 91人人草| 老女人性生活视频 | 黄色免费在线观看网站 | 一区二区三区国产视频 | 刘亦菲一区二区三区免费看 | 成人av在线看 | 91精品91| 中文在线观看免费 | 草草影院国产 | 少妇av导航 | 日韩中文字幕有码 | av色图 | 欧美日韩亚洲国产综合 | 国产91精品高潮白浆喷水 | 伊人网免费视频 | 夜夜躁很很躁日日躁麻豆 |