第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Python有哪些常用的部署方式?

Python有哪些常用的部署方式?

慕斯王 2019-04-06 16:57:44
我是php出身,在學(xué)python,對于python的部署感到很蛋疼..因?yàn)閜hp部署可能比較方便,一個(gè)php-fpm跑著就可以了。我知道uwsgi,gunicorn這些,gunicorn相對容易一點(diǎn),uwsgi相對蛋疼一些。另外我網(wǎng)上看到uwsgi可以配置vhost,就是多個(gè)站點(diǎn)跑一個(gè)進(jìn)程端口,和php-fpm一樣,不過聽說python這樣部署不是最好的,還是oneforapp最好?
查看完整描述

2 回答

?
慕沐林林

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊

引自-全面解讀pythonweb程序的9種部署方式
python有很多web開發(fā)框架,代碼寫完了,部署上線是個(gè)大事,通常來說,web應(yīng)用一般是三層結(jié)構(gòu)
webserver---->application----->DBserver
主流的webserver一個(gè)巴掌就能數(shù)出來,apache,lighttpd,nginx,iis
application,中文名叫做應(yīng)用服務(wù),就是你基于某個(gè)webframework寫的應(yīng)用代碼
DBserver泛指存儲(chǔ)服務(wù),web開發(fā)中用mysql比較多,最近幾年因?yàn)榫W(wǎng)站規(guī)模擴(kuò)大,memcache,redis這種key-value等存儲(chǔ)也流行開來
放在最前面的webserver有3個(gè)功能
高效率處理靜態(tài)文件,webserver都是用c開發(fā),調(diào)用是native的函數(shù),對IO,文件傳輸都做針對性的優(yōu)化
充當(dāng)一個(gè)簡易的網(wǎng)絡(luò)防火墻,可以denny一些ip,簡單的控制并發(fā)連接數(shù)量等等,聊勝于無
處理高并發(fā)短連接請求,把成千上萬用戶的request通過內(nèi)網(wǎng)的幾十個(gè)長連接進(jìn)行轉(zhuǎn)發(fā),原因一個(gè)是webserver處理高并發(fā)很專業(yè),另外一個(gè)原因是大部分的application所用的框架都不具備處理高并發(fā)的能力
實(shí)際上,市面上有部分webframework由于內(nèi)置了支持epoll/kqueue等高效網(wǎng)絡(luò)庫,而具備了處理高并發(fā)的能力,比如說python的tornado,java系的tomcat,jetty等等,有人就去掉前端的webserver,直接裸奔,但是在部署公網(wǎng)應(yīng)用時(shí)候,最好別這樣做,因?yàn)榍懊嫣岬降?,2兩個(gè)原因,用戶brower到webserver的網(wǎng)絡(luò)狀況是千奇百怪,你無法想象的,
webserver強(qiáng)烈建議使用nginx,原因有三
性能非常卓越,非常穩(wěn)定
安裝簡單,依賴包少
conf文件非常容易配置,比apache/lighttpd都要簡單
部署python開發(fā)的web程序有9種方法
modpython,這是apache內(nèi)置的模塊,很嚴(yán)重的依賴于modpython編譯使用的python版本,和apache配套使用,不推薦
cgi,這個(gè)太old,不推薦,而且nginx不支持cgi方式,只能用lighttpd或者apache
fastcgi,這個(gè)是目前流行最廣的做法,通過flup模塊來支持的,在nginx里對應(yīng)的配置指令是fastcgi_pass
spawn-fcgi,這個(gè)是fastcgi多進(jìn)程管理程序,lighttpd安裝包附帶的,和flup效果一樣,區(qū)別是flup是python代碼級引入,spawn-fcgi是外部程序。spawn-fcgi用途很廣,可以支持任意語言開發(fā)的代碼,php,python,perl,只要你代碼實(shí)現(xiàn)了fastcgi接口,它都可以幫你管理你的進(jìn)程
scgi,全名是SimpleCommonGatewayInterface,也是cgi的替代版本,scgi協(xié)議很簡單,我覺得和fastcgi差不多,只是沒有怎么推廣開來,nginx對應(yīng)的配置指令是scgi_pass,你想用就用,flup也支持。
http,nginx使用proxy_pass轉(zhuǎn)發(fā),這個(gè)要求后端appplication必須內(nèi)置一個(gè)能處理高并發(fā)的httpserver,在python的web框架當(dāng)中,只能選擇tornado.
python程序員喜歡發(fā)明輪子,tornado除了是一個(gè)webframework之外,它還可以單獨(dú)提供高性能httpserver,所以,如果你采用其他python框架寫代碼,比如說bottle,也一樣可以通過importtornado來啟動(dòng)一個(gè)高性能的httpserver,同樣的可以采用http協(xié)議和nginx一起來部署。擴(kuò)展開來,python包里面能處理高并發(fā)的httpserver還有很多,比如說gevent,也可以被其他框架引用來支持http方式部署。
現(xiàn)實(shí)當(dāng)中,用java來做web程序,通常就用http和nginx配合,應(yīng)用服務(wù)器選擇tomcat或者jetty
uwsgi,包括4部分組成,
uwsgi協(xié)議
webserver內(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ī)模的性能對比測試,結(jié)果表明,uwsgi和fastcgi相比,性能沒有太明顯的優(yōu)勢,也可能是數(shù)據(jù)集較小的原因
uwsgi的特點(diǎn)在于自帶的進(jìn)程控制程序.它是用c語言編寫,使用natvie函數(shù),其實(shí)和spawn-fcgi/php-fpm類似。所以uwsgi可以支持多種應(yīng)用框架,包括(python,lua,ruby,erlang,go)等等
*
Gunicorn,和uwsgi類似的工具,從rails的部署工具(Unicorn)移植過來的。但是它使用的協(xié)議是WSGI,全稱是PythonWebServerGatewayInterface,這是python2.5時(shí)定義的官方標(biāo)準(zhǔn)(PEP333),根紅苗正,而且部署比較簡單,http://gunicorn.org/上有詳細(xì)教程
*
mod_wsgi,apache的一個(gè)module,也是支持WSGI協(xié)議,https://code.google.com/p/modwsgi/
fastcgi協(xié)議和http協(xié)議在代碼部署中的的優(yōu)劣對比
fastcgi雖然是二進(jìn)制協(xié)議,相對于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è)請求
http代理轉(zhuǎn)發(fā)方式,在面對超高并發(fā)的情況下會(huì)出問題,因?yàn)?,tcp協(xié)議棧當(dāng)中,port是int16整型你本地新建一個(gè)connect,需要消耗一個(gè)端口,最多能到65536。外部并發(fā)幾十萬個(gè)請求,port池耗干,你的服務(wù)器只能拒絕響應(yīng)了
總結(jié)
我個(gè)人習(xí)慣是用fastcgi協(xié)議部署python程序,簡單省事,選擇技術(shù)方案,一定要選擇最簡單最常見的,本博客的fastcgi運(yùn)行腳本如下
1.kill-9`cat/tmp/django.pid`
2.echo'restartdjango....'
3.python./manage.pyrunfcgi--settings=lutaf.settings_rmaxchildren=8maxspare=3minspare=1method=preforkpidfile=/tmp/django.pidhost=127.0.0.1port=9900outlog=/tmp/dj.outerrlog=/tmp/dj.error
推薦大家嘗試Gunicorn,這是未來發(fā)展方向
                            
查看完整回答
反對 回復(fù) 2019-04-06
?
www說

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊

隨便google一下就一堆的東西就不多說了,來說一個(gè)比較偏門但非常方便的東西,就是passenger。
跟很多人聊到這個(gè)的時(shí)候,大家普遍有誤解,以為這個(gè)是ruby專用的,其實(shí)passenger是適用于python、ruby和nodejs的。
passenger的安裝需要重新編譯nginx,配置起來也相當(dāng)容易,不需要額外的supervisor或circus等服務(wù)
root/path/to/app/public;
passenger_python/path/to/app/venv/bin/python;
passenger_enabledon;
具體配置參考官方文檔,相信不會(huì)讓你失望。
                            
查看完整回答
反對 回復(fù) 2019-04-06
  • 2 回答
  • 0 關(guān)注
  • 378 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)