最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

9種python web 程序的部署方式小結(jié)

 更新時(shí)間:2014年06月30日 09:02:04   投稿:hebedich  
python有很多web 開發(fā)框架,代碼寫完了,部署上線是個(gè)大事,通常來說,web應(yīng)用一般是三層結(jié)構(gòu)web server ---->application -----> DB server

主流的web server 一個(gè)巴掌就能數(shù)出來,apache,lighttpd,nginx,iis

application,中文名叫做應(yīng)用服務(wù),就是你基于某個(gè)web framework寫的應(yīng)用代碼DB server 泛指存儲(chǔ)服務(wù),web開發(fā)中用mysql比較多,最近幾年因?yàn)榫W(wǎng)站規(guī)模擴(kuò)大,memcache,redis這種key-value等存儲(chǔ)也流行開來
放在最前面的 web server 有3個(gè)功能

高效率處理靜態(tài)文件 ,web server都是用c開發(fā),調(diào)用是native的函數(shù),對(duì)IO,文件傳輸都做針對(duì)性的優(yōu)化

充當(dāng)一個(gè)簡易的網(wǎng)絡(luò)防火墻 ,可以denny一些ip,簡單的控制并發(fā)連接數(shù)量等等,聊勝于無

處理高并發(fā)短連接請(qǐng)求 ,把成千上萬用戶的request 通過內(nèi)網(wǎng)的幾十個(gè)長連接進(jìn)行轉(zhuǎn)發(fā),原因一個(gè)是web server處理高并發(fā)很專業(yè),另外一個(gè)原因是大部分的application所用的框架都不具備處理高并發(fā)的能力

實(shí)際上,市面上有部分web framework由于內(nèi)置了支持epoll/kqueue 等高效網(wǎng)絡(luò)庫,而具備了處理高并發(fā)的能力,比如說 python的tornado,java系的tomcat,jetty等等,有人就去掉前端的web server,直接裸奔,但是在部署公網(wǎng)應(yīng)用時(shí)候,最好別這樣做,因?yàn)榍懊嫣岬降?,2兩個(gè)原因,用戶brower到web server的網(wǎng)絡(luò)狀況是千奇百怪,你無法想象的,

web server 強(qiáng)烈建議使用nginx,原因有三

性能非常卓越,非常穩(wěn)定
安裝簡單,依賴包少
conf文件非常容易配置,比apache/lighttpd都要簡單
部署python開發(fā)的web程序有9種方法

mod_python ,這是apache內(nèi)置的模塊,很嚴(yán)重的依賴于mod_python編譯使用的python版本,和apache配套使用,不推薦

cgi ,這個(gè)太old,不推薦,而且nginx不支持cgi方式,只能用lighttpd或者apache

fastcgi  ,這個(gè)是目前流行最廣的做法,通過flup模塊來支持的,在nginx里對(duì)應(yīng)的配置指令是 fastcgi_pass

spawn-fcgi ,這個(gè)是fastcgi多進(jìn)程管理程序,lighttpd安裝包附帶的,和 flup效果一樣,區(qū)別是flup是 python代碼級(jí)引入,spawn-fcgi是外部程序。spawn-fcgi用途很廣,可以支持任意語言開發(fā)的代碼,php,python,perl,只要你代碼實(shí)現(xiàn)了fastcgi接口,它都可以幫你管理你的進(jìn)程

scgi ,全名是Simple Common Gateway Interface,也是cgi的替代版本, scgi協(xié)議 很簡單,我覺得和fastcgi差不多,只是沒有怎么推廣開來,nginx對(duì)應(yīng)的配置指令是scgi_pass,你想用就用,flup也支持。

http ,nginx使用proxy_pass轉(zhuǎn)發(fā),這個(gè)要求后端appplication必須內(nèi)置一個(gè)能處理高并發(fā)的http server,在python的web框架當(dāng)中,只能選擇tornado.

python程序員喜歡發(fā)明輪子,tornado除了是一個(gè)web framework之外,它還可以單獨(dú)提供高性能http server,所以,如果你采用其他python框架寫代碼,比如說bottle,也一樣可以通過import tornado 來啟動(dòng)一個(gè)高性能的http server,同樣的可以采用http協(xié)議和nginx一起來部署。擴(kuò)展開來,python包里面能處理高并發(fā)的http server還有很多,比如說gevent,也可以被其他框架引用來支持http方式部署。

現(xiàn)實(shí)當(dāng)中,用java來做web程序,通常就用http和nginx配合,應(yīng)用服務(wù)器選擇tomcat或者jetty

uwsgi ,包括4部分組成,

uwsgi協(xié)議
web server內(nèi)置支持協(xié)議模塊
application服務(wù)器協(xié)議支持模塊
進(jìn)程控制程序

nginx從0.8.4開始內(nèi)置支持uwsgi協(xié)議,uwsgi協(xié)議非常簡單,一個(gè)4個(gè)字節(jié)header+一個(gè)body,body可以是很多協(xié)議的包,比如說http,cgi等(通過header里面字段標(biāo)示),我曾經(jīng)做個(gè)一個(gè)小規(guī)模的性能對(duì)比測試,結(jié)果表明,uwsgi和fastcgi相比,性能沒有太明顯的優(yōu)勢(shì),也可能是數(shù)據(jù)集較小的原因

uwsgi的特點(diǎn)在于自帶的進(jìn)程控制程序.它是用c語言編寫,使用natvie函數(shù),其實(shí)和spawn-fcgi/php-fpm類似。所以u(píng)wsgi可以支持多種應(yīng)用框架,包括(python,lua,ruby,erlang,go)等等

Gunicorn ,和uwsgi類似的工具,從rails的部署工具(Unicorn)移植過來的。但是它使用的協(xié)議是 WSGI,全稱是Python Web Server Gateway Interface ,這是python2.5時(shí)定義的官方標(biāo)準(zhǔn)( PEP 333  ),根紅苗正,而且部署比較簡單, http://gunicorn.org/  上有詳細(xì)教程

mod_wsgi ,apache的一個(gè)module,也是支持WSGI協(xié)議, https://code.google.com/p/modwsgi/

fastcgi協(xié)議和http協(xié)議在代碼部署中的的優(yōu)劣對(duì)比

fastcgi雖然是二進(jìn)制協(xié)議,相對(duì)于http協(xié)議,并不節(jié)省資源。二進(jìn)制協(xié)議,只能節(jié)省數(shù)字的表達(dá),比如 1234567,用字符串表示需要7個(gè)Byte,用數(shù)字就是4個(gè)Byte,而字符串到哪里都一樣

fastcgi在傳輸數(shù)據(jù)的時(shí)候,為了兼容cgi協(xié)議,還要帶上一堆cgi的環(huán)境變量,所以和http協(xié)議相比,用fastcgi傳輸數(shù)據(jù)并不省,反而多一些

fastcgi 唯一的優(yōu)點(diǎn)是,它是長連接的,用戶并發(fā)1000個(gè)request,fastcgi可能就用10個(gè) 鏈接轉(zhuǎn)發(fā)給后端的appplication,如果用http協(xié)議,那來多少給多少,會(huì)向后端appplication 發(fā)起1000個(gè)請(qǐng)求

http代理轉(zhuǎn)發(fā)方式,在面對(duì)超高并發(fā)的情況下會(huì)出問題,因?yàn)椋?tcp協(xié)議棧當(dāng)中,port是int16整型  你本地新建一個(gè)connect,需要消耗一個(gè)端口,最多能到65536。外部并發(fā)幾十萬個(gè)請(qǐng)求,port池耗干,你的服務(wù)器只能拒絕響應(yīng)了

總結(jié)

我個(gè)人習(xí)慣是用 fastcgi 協(xié)議部署python程序,簡單省事,選擇技術(shù)方案,一定要選擇最簡單最常見的,本博客的fastcgi運(yùn)行腳本如下

kill - `cat / tmp / django.pid`
echo 'restart django....' 
python . / manage.py runfcgi - - settings = lutaf.settings_r maxchildren =  maxspare = minspare =  method = prefork pidfile = / tmp / django.pid host = 127.0 . 0.1  port = outlog = / tmp / dj.out errlog = / tmp / dj.error

推薦大家嘗試 Gunicorn ,這是未來發(fā)展方向

相關(guān)文章

  • Python中request庫的各種用法詳細(xì)解析

    Python中request庫的各種用法詳細(xì)解析

    本文詳細(xì)介紹了Python的requests庫的安裝與使用,包括HTTP請(qǐng)求方法、請(qǐng)求頭、請(qǐng)求體的基本概念,以及發(fā)送GET和POST請(qǐng)求的基本用法,同時(shí),探討了會(huì)話對(duì)象、處理重定向、超時(shí)設(shè)置、代理支持等高級(jí)功能,幫助讀者更高效地處理復(fù)雜的HTTP請(qǐng)求場景,需要的朋友可以參考下
    2024-10-10
  • pandas數(shù)據(jù)缺失的兩種處理辦法

    pandas數(shù)據(jù)缺失的兩種處理辦法

    本文主要介紹了在pandas中處理數(shù)據(jù)缺失和0值,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • 使用Python實(shí)現(xiàn)兩組數(shù)據(jù)縱向排序

    使用Python實(shí)現(xiàn)兩組數(shù)據(jù)縱向排序

    在數(shù)據(jù)處理和分析中,排序是一項(xiàng)非?;A(chǔ)且重要的操作,本文將詳細(xì)介紹如何使用Python對(duì)兩組數(shù)據(jù)進(jìn)行縱向排序,即每一列分別進(jìn)行排序,同時(shí)保持?jǐn)?shù)據(jù)的對(duì)應(yīng)關(guān)系,需要的可以參考下
    2024-12-12
  • Python實(shí)現(xiàn)敲擊木魚積累功德小項(xiàng)目

    Python實(shí)現(xiàn)敲擊木魚積累功德小項(xiàng)目

    最近大家都很流行用手機(jī)敲擊電子木魚積累功德,這在很多短視頻中也常常見到。本文將用Python實(shí)現(xiàn)這一效果,感興趣的小伙伴可以了解一下
    2022-11-11
  • python小程序之飄落的銀杏

    python小程序之飄落的銀杏

    這篇文章主要介紹了利用制作的python小程序-飄落的銀杏,代碼詳細(xì),簡單易懂,有需要練習(xí)python的朋友可以參考下
    2021-04-04
  • python如何重載模塊實(shí)例解析

    python如何重載模塊實(shí)例解析

    這篇文章主要介紹了python如何重載模塊實(shí)例解析,涉及模塊的概念,載入和重載的實(shí)例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python 類的繼承實(shí)例詳解

    Python 類的繼承實(shí)例詳解

    這篇文章主要介紹了Python 類的繼承實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 使用Python實(shí)現(xiàn)一個(gè)蔡徐坤大戰(zhàn)籃球的小游戲(推薦)

    使用Python實(shí)現(xiàn)一個(gè)蔡徐坤大戰(zhàn)籃球的小游戲(推薦)

    這篇文章主要介紹了用Python實(shí)現(xiàn)一個(gè)蔡徐坤大戰(zhàn)籃球的小游戲,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • pytorch 狀態(tài)字典:state_dict使用詳解

    pytorch 狀態(tài)字典:state_dict使用詳解

    今天小編就為大家分享一篇pytorch 狀態(tài)字典:state_dict使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python靜態(tài)方法實(shí)例

    python靜態(tài)方法實(shí)例

    這篇文章主要介紹了python靜態(tài)方法,實(shí)例分析了python靜態(tài)方法的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01

最新評(píng)論

北碚区| 万荣县| 延川县| 赣州市| 襄樊市| 蓬安县| 鄂伦春自治旗| 清新县| 开封县| 辽阳市| 白玉县| 永城市| 手游| 嵊州市| 揭西县| 平陆县| 建昌县| 台江县| 铁岭市| 唐海县| 杭锦旗| 牙克石市| 舒兰市| 正定县| 新干县| 铜山县| 南丰县| 大竹县| 八宿县| 巨鹿县| 格尔木市| 高清| 华安县| 甘泉县| 灵璧县| 武陟县| 文化| 富源县| 南丹县| 达日县| 赤壁市|