python項(xiàng)目環(huán)境部署(二)--uwsgi

WSGI是什么伍俘?

WSGI,全稱Web Server Gateway Interface
勉躺,或者Python Web Server Gateway Interface癌瘾,是為Python語(yǔ)言定義的web服務(wù)器和Web應(yīng)用程序或框架之間的一種簡(jiǎn)單而通用的接口。
WSGI 的官方定義是饵溅,the Python Web Server Gateway Interface妨退。從名字就可以看出來(lái),這東西是一個(gè)Gateway,也就是網(wǎng)關(guān)碧注。網(wǎng)關(guān)的作用就是在協(xié)議之間進(jìn)行轉(zhuǎn)換。
WSGI是作為Web服務(wù)器與Web應(yīng)用程序或應(yīng)用框架之間的一種低級(jí)別的接口糖赔,以提升可移植Web應(yīng)開發(fā)的共同點(diǎn)萍丐。WSGI是基于現(xiàn)存的CGI標(biāo)準(zhǔn)而設(shè)計(jì)的。
很多框架都自帶了 WSGI server 放典,比如 Flask逝变,webpy,Django奋构、CherryPy等等壳影。當(dāng)然性能都不好,自帶的 web server 更多的是測(cè)試用途弥臼,發(fā)布時(shí)則使用生產(chǎn)環(huán)境的 WSGI server或者是聯(lián)合 nginx 做 uwsgi 宴咧。

也就是說(shuō),WSGI就像是一座橋梁径缅,一邊連著web服務(wù)器掺栅,另一邊連著用戶的應(yīng)用。但是呢纳猪,這個(gè)橋的功能很弱氧卧,有時(shí)候還需要?jiǎng)e的橋來(lái)幫忙才能進(jìn)行處理。

WSGI的作用

WSGI有兩方:“服務(wù)器”或“網(wǎng)關(guān)”一方氏堤,以及“應(yīng)用程序”或“應(yīng)用框架”一方沙绝。服務(wù)方調(diào)用應(yīng)用方,提供環(huán)境信息鼠锈,以及一個(gè)回調(diào)函數(shù)(提供給應(yīng)用程序用來(lái)將消息頭傳遞給服務(wù)器方)闪檬,并接收Web內(nèi)容作為返回值。

所謂的 WSGI中間件同時(shí)實(shí)現(xiàn)了API的兩方购笆,因此可以在WSGI服務(wù)和WSGI應(yīng)用之間起調(diào)解作用:從WSGI服務(wù)器的角度來(lái)說(shuō)谬以,中間件扮演應(yīng)用程序,而從應(yīng)用程序的角度來(lái)說(shuō)由桌,中間件扮演服務(wù)器为黎。“中間件”組件可以執(zhí)行以下功能:

  • 重寫環(huán)境變量后行您,根據(jù)目標(biāo)URL铭乾,將請(qǐng)求消息路由到不同的應(yīng)用對(duì)象。
  • 允許在一個(gè)進(jìn)程中同時(shí)運(yùn)行多個(gè)應(yīng)用程序或應(yīng)用框架娃循。
  • 負(fù)載均衡和遠(yuǎn)程處理炕檩,通過(guò)在網(wǎng)絡(luò)上轉(zhuǎn)發(fā)請(qǐng)求和響應(yīng)消息。
  • 進(jìn)行內(nèi)容后處理,例如應(yīng)用XSLT樣式表笛质。

常見的WSGI容器

WSGI是一個(gè)同步接口泉沾,所以框架自帶的WSGI是無(wú)法實(shí)現(xiàn)異步的。主流的選擇是Gunicorn和uWSGI妇押。

uWSGI

uWSGI是應(yīng)c編寫的跷究,它是一個(gè)WEB服務(wù)器,實(shí)現(xiàn)的了自有的uwsgi協(xié)議的Web服務(wù)器敲霍。他自帶豐富的組件俊马,其中核心組件包含進(jìn)程管理、監(jiān)控肩杈、IPC等功能柴我,實(shí)現(xiàn)應(yīng)用Web服務(wù)器接口的請(qǐng)求插件支持多種語(yǔ)言和平臺(tái),比如WSGI扩然、Rack艘儒、Lua WSAPI,網(wǎng)關(guān)組件實(shí)現(xiàn)了負(fù)載均衡夫偶、代理和路由組成彤悔。

它啟動(dòng)的命令相對(duì)復(fù)雜一些
簡(jiǎn)單的WSGI應(yīng)用
在項(xiàng)目的目錄下新建一個(gè)blog.py文件

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

可以用 --processes 選項(xiàng)添加更多的進(jìn)程,或者使用 --threads 選項(xiàng)添加更多的線程 (或者可以同時(shí)添加)索守,而且開啟了9191的Web接口晕窑,返回uWSGI的信息,以及不同進(jìn)程和線程的詳細(xì)使用情況卵佛。對(duì)你的應(yīng)用進(jìn)行幾次請(qǐng)求杨赤,然后telnet到端口9191,會(huì)獲得大量有趣的信息

uwsgi --http :9090 --wsgi-file blog.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

以上是http方式截汪,啟動(dòng)后可以直接通過(guò)127.0.0.1:9090 訪問(wèn)

  • --http-socket 和--http其實(shí)是完全不同的兩個(gè)選項(xiàng)疾牲。如果想直接裸跑uWSGI,應(yīng)該使用--http衙解,它產(chǎn)生一個(gè)額外的進(jìn)程將請(qǐng)求轉(zhuǎn)發(fā)給Workers阳柔,如果希望他被反向代理(比如和Nginx一起來(lái)用),應(yīng)該使用--http-socket

uwsgi支持多種配置風(fēng)格蚓峦,接下來(lái)使用.ini文件舌剂。新建blog.ini

[uwsgi]
http=:8089
chdir = /home/student/project/newsite/
wsgi-file = /home/student/project/newsite/newsite/wsgi.py
processes = 4
threads = 2
stats = 127.0.0.1:9191

直接在終端用uwsgi --blog.ini運(yùn)行。

Gunicorn

gunicorn暑椰,是“Green Unicorn”是一個(gè)唄廣泛使用的高性能的Python WSGI UNIX HTTP服務(wù)霍转,具有使用非常簡(jiǎn)單,輕量級(jí)的資源消耗一汽,以及高性能等特點(diǎn)避消。支持Django,paster,wsgi程序岩喷。自動(dòng)管理多個(gè)worker進(jìn)程恕沫。

在裝好gunicorn之后, 我們來(lái)看看gunicorn的hello world。代碼來(lái)自官網(wǎng)纱意,將下面的代碼放到myapp.py中:

def app(environ, start_response):
        data = b"Hello, World!\n"
        start_response("200 OK", [("Content-Type", "text/plain"),("Content-Length", str(len(data)))])
        return iter([data])

然后我們啟動(dòng):gunicorn -w 4 myapp:app

![gun.JPG](http://upload-images.jianshu.io/upload_images/5903064-0aed2b7ad6a460e8.JPG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

上圖展示了兩個(gè)很重要的信息:
  第一:?jiǎn)?dòng)了四個(gè)worker婶溯,這是通過(guò)"-w 4"指定(默認(rèn)為1)
  第二:worker的工作模型是sync(默認(rèn))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市妇穴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌隶债,老刑警劉巖腾它,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異死讹,居然都是意外死亡瞒滴,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門赞警,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)妓忍,“玉大人,你說(shuō)我怎么就攤上這事愧旦∈榔剩” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵笤虫,是天一觀的道長(zhǎng)旁瘫。 經(jīng)常有香客問(wèn)我,道長(zhǎng)琼蚯,這世上最難降的妖魔是什么酬凳? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮遭庶,結(jié)果婚禮上宁仔,老公的妹妹穿的比我還像新娘。我一直安慰自己峦睡,他們只是感情好翎苫,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著榨了,像睡著了一般拉队。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阻逮,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天粱快,我揣著相機(jī)與錄音,去河邊找鬼。 笑死事哭,一個(gè)胖子當(dāng)著我的面吹牛漫雷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鳍咱,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼降盹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了谤辜?” 一聲冷哼從身側(cè)響起蓄坏,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丑念,沒(méi)想到半個(gè)月后涡戳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脯倚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年渔彰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片推正。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恍涂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出植榕,到底是詐尸還是另有隱情再沧,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布尊残,位于F島的核電站产园,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏夜郁。R本人自食惡果不足惜什燕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望竞端。 院中可真熱鬧屎即,春花似錦、人聲如沸事富。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)统台。三九已至雕擂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贱勃,已是汗流浹背井赌。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工谤逼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仇穗。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓流部,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親纹坐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子枝冀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容