国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

            手機(jī)站
            千鋒教育

            千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

            千鋒教育

            掃一掃進(jìn)入千鋒手機(jī)站

            領(lǐng)取全套視頻
            千鋒教育

            關(guān)注千鋒學(xué)習(xí)站小程序
            隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

            當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > Python Web 部署方式

            Python Web 部署方式

            來(lái)源:千鋒教育
            發(fā)布人:xqq
            時(shí)間: 2023-11-07 07:01:32 1699311692

            不要讓服務(wù)器裸奔

            學(xué)過(guò)PHP的都了解,php的正式環(huán)境部署非常簡(jiǎn)單,改幾個(gè)文件就OK,用FastCgi方式也是分分鐘的事情。相比起來(lái),Python在web應(yīng)用上的部署就繁雜的多,主要是工具繁多,主流服務(wù)器支持不足,在了解Python的生產(chǎn)環(huán)境部署方式之前,先明確一些概念!很重要!

            CGI:

            CGI即通用網(wǎng)關(guān)接口(CommonGatewayInterface),是外部應(yīng)用程序(CGI程序)與Web服務(wù)器之間的接口標(biāo)準(zhǔn),是在CGI程序和Web服務(wù)器之間傳遞信息的規(guī)程。CGI規(guī)范允許Web服務(wù)器執(zhí)行外部程序,并將它們的輸出發(fā)送給Web瀏覽器,CGI將Web的一組簡(jiǎn)單的靜態(tài)超媒體文檔變成一個(gè)完整的新的交互式媒體。通俗的講CGI就像是一座橋,把網(wǎng)頁(yè)和WEB服務(wù)器中的執(zhí)行程序連接起來(lái),它把HTML接收的指令傳遞給服務(wù)器的執(zhí)行程序,再把服務(wù)器執(zhí)行程序的結(jié)果返還給HTML頁(yè)。CGI的跨平臺(tái)性能極佳,幾乎可以在任何操作系統(tǒng)上實(shí)現(xiàn)。

            CGI方式在遇到連接請(qǐng)求(用戶請(qǐng)求)先要?jiǎng)?chuàng)建cgi的子進(jìn)程,激活一個(gè)CGI進(jìn)程,然后處理請(qǐng)求,處理完后結(jié)束這個(gè)子進(jìn)程。這就是fork-and-execute模式。所以用cgi方式的服務(wù)器有多少連接請(qǐng)求就會(huì)有多少cgi子進(jìn)程,子進(jìn)程反復(fù)加載是cgi性能低下的主要原因。當(dāng)用戶請(qǐng)求數(shù)量非常多時(shí),會(huì)大量擠占系統(tǒng)的資源如內(nèi)存,CPU時(shí)間等,造成效能低下。

            CGI腳本工作流程:

            瀏覽器通過(guò)HTML表單或超鏈接請(qǐng)求指向一個(gè)CGI應(yīng)用程序的URL。

            服務(wù)器執(zhí)行務(wù)器收發(fā)到請(qǐng)求。所指定的CGI應(yīng)用程序。

            CGI應(yīng)用程序執(zhí)行所需要的操作,通常是基于瀏覽者輸入的內(nèi)容。

            CGI應(yīng)用程序把結(jié)果格式化為網(wǎng)絡(luò)服務(wù)器和瀏覽器能夠理解的文檔(通常是HTML網(wǎng)頁(yè))。

            網(wǎng)絡(luò)服務(wù)器把結(jié)果返回到瀏覽器中。

            python有cgi模塊可支持原生cgi程序

            FastCGI:

            FastCGI是一個(gè)可伸縮地、高速地在HTTPserver和動(dòng)態(tài)腳本語(yǔ)言間通信的接口。多數(shù)流行的HTTPserver都支持FastCGI,包括Apache、Nginx和lighttpd等,同時(shí),F(xiàn)astCGI也被許多腳本語(yǔ)言所支持,其中就有Python。FastCGI是從CGI發(fā)展改進(jìn)而來(lái)的。傳統(tǒng)CGI接口方式的主要缺點(diǎn)是性能很差,因?yàn)槊看蜨TTP服務(wù)器遇到動(dòng)態(tài)程序時(shí)都需要重新啟動(dòng)腳本解析器來(lái)執(zhí)行解析,然后結(jié)果被返回給HTTP服務(wù)器。這在處理高并發(fā)訪問(wèn)時(shí),幾乎是不可用的。FastCGI像是一個(gè)常駐(long-live)型的CGI,它可以一直執(zhí)行著,只要激活后,不會(huì)每次都要花費(fèi)時(shí)間去fork一次(這是CGI最為人詬病的fork-and-execute模式)。CGI就是所謂的短生存期應(yīng)用程序,F(xiàn)astCGI就是所謂的長(zhǎng)生存期應(yīng)用程序。由于FastCGI程序并不需要不斷的產(chǎn)生新進(jìn)程,可以大大降低服務(wù)器的壓力并且產(chǎn)生較高的應(yīng)用效率。它的速度效率最少要比CGI技術(shù)提高5倍以上。它還支持分布式的運(yùn)算,即FastCGI程序可以在網(wǎng)站服務(wù)器以外的主機(jī)上執(zhí)行并且接受來(lái)自其它網(wǎng)站服務(wù)器來(lái)的請(qǐng)求。

            FastCGI是語(yǔ)言無(wú)關(guān)的、可伸縮架構(gòu)的CGI開(kāi)放擴(kuò)展,其主要行為是將CGI解釋器進(jìn)程保持在內(nèi)存中并因此獲得較高的性能。眾所周知,CGI解釋器的反復(fù)加載是CGI性能低下的主要原因,如果CGI解釋器保持在內(nèi)存中并接受FastCGI進(jìn)程管理器調(diào)度,則可以提供良好的性能、伸縮性、Fail-Over特性等等。FastCGI接口方式采用C/S結(jié)構(gòu),可以將HTTP服務(wù)器和腳本解析服務(wù)器分開(kāi),同時(shí)在腳本解析服務(wù)器上啟動(dòng)一個(gè)或者多個(gè)腳本解析守護(hù)進(jìn)程。當(dāng)HTTP服務(wù)器每次遇到動(dòng)態(tài)程序時(shí),可以將其直接交付給FastCGI進(jìn)程來(lái)執(zhí)行,然后將得到的結(jié)果返回給瀏覽器。這種方式可以讓HTTP服務(wù)器專一地處理靜態(tài)請(qǐng)求或者將動(dòng)態(tài)腳本服務(wù)器的結(jié)果返回給客戶端,這在很大程度上提高了整個(gè)應(yīng)用系統(tǒng)的性能。

            FastCGI的工作流程:

            WebServer啟動(dòng)時(shí)載入FastCGI進(jìn)程管理器(PHP-CGI或者PHP-FPM或者spawn-cgi)

            FastCGI進(jìn)程管理器自身初始化,啟動(dòng)多個(gè)CGI解釋器進(jìn)程(可見(jiàn)多個(gè)php-cgi)并等待來(lái)自WebServer的連接。

            當(dāng)客戶端請(qǐng)求到達(dá)WebServer時(shí),F(xiàn)astCGI進(jìn)程管理器選擇并連接到一個(gè)CGI解釋器。Webserver將CGI環(huán)境變量和標(biāo)準(zhǔn)輸入發(fā)送到FastCGI子進(jìn)程php-cgi。

            FastCGI子進(jìn)程完成處理后將標(biāo)準(zhǔn)輸出和錯(cuò)誤信息從同一連接返回WebServer。當(dāng)FastCGI子進(jìn)程關(guān)閉連接時(shí),請(qǐng)求便告處理完成。FastCGI子進(jìn)程接著等待并處理來(lái)自FastCGI進(jìn)程管理器(運(yùn)行在WebServer中)的下一個(gè)連接。在CGI模式中,php-cgi在此便退出。

            FastCGI的特點(diǎn):

            打破傳統(tǒng)頁(yè)面處理技術(shù)。傳統(tǒng)的頁(yè)面處理技術(shù),程序必須與Web服務(wù)器或Application服務(wù)器處于同一臺(tái)服務(wù)器中。這種歷史已經(jīng)早N年被FastCGI技術(shù)所打破,F(xiàn)astCGI技術(shù)的應(yīng)用程序可以被安裝在服務(wù)器群中的任何一臺(tái)服務(wù)器,而通過(guò)TCP/IP協(xié)議與Web服務(wù)器通訊,這樣做既適合開(kāi)發(fā)大型分布式Web群,也適合高效數(shù)據(jù)庫(kù)控制。

            明確的請(qǐng)求模式。CGI技術(shù)沒(méi)有一個(gè)明確的角色,在FastCGI程序中,程序被賦予明確的角色(響應(yīng)器角色、認(rèn)證器角色、過(guò)濾器角色)。

            WSGI:

            PythonWeb服務(wù)器網(wǎng)關(guān)接口(PythonWebServerGatewayInterface,縮寫(xiě)為WSGI)是為Python語(yǔ)言定義的Web服務(wù)器和Web應(yīng)用程序或框架之間的一種簡(jiǎn)單而通用的接口。自從WSGI被開(kāi)發(fā)出來(lái)以后,許多其它語(yǔ)言中也出現(xiàn)了類似接口。WSGI是作為Web服務(wù)器與Web應(yīng)用程序或應(yīng)用框架之間的一種低級(jí)別的接口,以提升可移植Web應(yīng)用開(kāi)發(fā)的共同點(diǎn)。WSGI是基于現(xiàn)存的CGI標(biāo)準(zhǔn)而設(shè)計(jì)的。

            WSGI區(qū)分為兩個(gè)部份:一為“服務(wù)器”或“網(wǎng)關(guān)”,另一為“應(yīng)用程序”或“應(yīng)用框架”。在處理一個(gè)WSGI請(qǐng)求時(shí),服務(wù)器會(huì)為應(yīng)用程序提供環(huán)境上下文及一個(gè)回調(diào)函數(shù)(CallbackFunction)。當(dāng)應(yīng)用程序完成處理請(qǐng)求后,透過(guò)先前的回調(diào)函數(shù),將結(jié)果回傳給服務(wù)器。所謂的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ù)器?!爸虚g件”組件可以執(zhí)行以下功能:

            重寫(xiě)環(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樣式表。

            以前,如何選擇合適的Web應(yīng)用程序框架成為困擾Python初學(xué)者的一個(gè)問(wèn)題,這是因?yàn)?,一般而言,Web應(yīng)用框架的選擇將限制可用的Web服務(wù)器的選擇,反之亦然。那時(shí)的Python應(yīng)用程序通常是為CGI,F(xiàn)astCGI,mod_python中的一個(gè)而設(shè)計(jì),甚至是為特定Web服務(wù)器的自定義的API接口而設(shè)計(jì)的。WSGI沒(méi)有官方的實(shí)現(xiàn),因?yàn)閃SGI更像一個(gè)協(xié)議。只要遵照這些協(xié)議,WSGI應(yīng)用(Application)都可以在任何服務(wù)器(Server)上運(yùn)行,反之亦然。WSGI就是Python的CGI包裝,相對(duì)于Fastcgi是PHP的CGI包裝。

            WSGI將web組件分為三類:web服務(wù)器,web中間件,web應(yīng)用程序,wsgi基本處理模式為:WSGIServer->(WSGIMiddleware)*->WSGIApplication。

            uwsgi:

            uwsgi協(xié)議是一個(gè)uWSGI服務(wù)器自有的協(xié)議,它用于定義傳輸信息的類型(typeofinformation),每一個(gè)uwsgipacket前4byte為傳輸信息類型描述,它與WSGI相比是兩樣?xùn)|西。據(jù)稱其效率是fcgi的10倍。具體的協(xié)議內(nèi)容請(qǐng)參考:theuwsgiprotocol(http://uwsgi-docs.readthedocs.org/en/latest/Protocol.html)

            以上四者都可以理解為協(xié)議!協(xié)議!協(xié)議!實(shí)現(xiàn)了這樣的協(xié)議,就可以實(shí)現(xiàn)Web服務(wù)器與Web應(yīng)用程序相關(guān)聯(lián)的web服務(wù)!

            uWSGI:

            uWSGI項(xiàng)目旨在為部署分布式集群的網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā)一套完整的解決方案。uWSGI主要面向web及其標(biāo)準(zhǔn)服務(wù),已經(jīng)成功的應(yīng)用于多種不同的語(yǔ)言。由于uWSGI的可擴(kuò)展架構(gòu),它能夠被無(wú)限制的擴(kuò)展用來(lái)支持更多的平臺(tái)和語(yǔ)言。目前,你可以使用C,C++和Objective-C來(lái)編寫(xiě)插件。項(xiàng)目名稱中的“WSGI”是為了向同名的PythonWeb標(biāo)準(zhǔn)表示感謝,因?yàn)閃SGI為該項(xiàng)目開(kāi)發(fā)了第一個(gè)插件。uWSGI是一個(gè)Web服務(wù)器,它實(shí)現(xiàn)了WSGI協(xié)議、uwsgi、http等協(xié)議。uWSGI,既不用wsgi協(xié)議也不用FastCGI協(xié)議,而是自創(chuàng)了上文說(shuō)將的uwsgi協(xié)議。

            uWSGI的主要特點(diǎn)如下:

            超快的性能。

            低內(nèi)存占用(實(shí)測(cè)為apache2的mod_wsgi的一半左右)。

            多app管理。

            詳盡的日志功能(可以用來(lái)分析app性能和瓶頸)。

            高度可定制(內(nèi)存大小限制,服務(wù)一定次數(shù)后重啟等)。

            Gunicorn:

            和uWSGi類似的工具,從rails的部署工具(Unicorn)移植過(guò)來(lái)的。但是它使用的協(xié)議是前文所講的WSGI,這是python2.5時(shí)定義的官方標(biāo)準(zhǔn)(PEP333),根紅苗正,而且部署比較簡(jiǎn)單,詳細(xì)的使用教程請(qǐng)點(diǎn)擊這里(http://gunicorn.org/)。Gunicorn采用prefork模式,Gunicorn服務(wù)器與各種Web框架兼容,只需非常簡(jiǎn)單的執(zhí)行,輕量級(jí)的資源消耗,以及相當(dāng)迅速。它的特點(diǎn)是與Django結(jié)合緊密,部署特別方便。缺點(diǎn)也很多,不支持HTTP1.1,并發(fā)訪問(wèn)性能不高,與uWSGI,Gevent等有一定的性能差距。

            1.Gunicorn設(shè)計(jì)

            Gunicorn是一個(gè)master進(jìn)程,spawn出數(shù)個(gè)工作進(jìn)程的web服務(wù)器。master進(jìn)程控制工作進(jìn)程的產(chǎn)生與消亡,工作進(jìn)程只需要接受請(qǐng)求并且處理。這樣分離的方式使得reload代碼非常方便,也很容易增加或減少工作進(jìn)程。工作進(jìn)程這塊作者給了很大的擴(kuò)展余地,它可以支持不同的IO方式,如Gevent,Sync同步進(jìn)程,Asyc異步進(jìn)程,Eventlet等等。master跟worker進(jìn)程完全分離,使得Gunicorn實(shí)質(zhì)上就是一個(gè)控制進(jìn)程的服務(wù)。

            2.Gunicorn源碼結(jié)構(gòu)

            從Application.run()開(kāi)始,首先初始化配置,從文件讀取,終端讀取等等方式完成configurate。然后啟動(dòng)Arbiter,Arbiter是實(shí)質(zhì)上的master進(jìn)程的核心,它首先從配置類中讀取并設(shè)置,然后初始化信號(hào)處理函數(shù),建立socket。然后就是開(kāi)始spawn工作進(jìn)程,根據(jù)配置的工作進(jìn)程數(shù)進(jìn)行spawn。然后就進(jìn)入了輪詢狀態(tài),收到信號(hào),處理信號(hào)然后繼續(xù)。這里喚醒進(jìn)程的方式是建立一個(gè)PIPE,通過(guò)信號(hào)處理函數(shù)往pipe里write,然后master從select.select()中喚醒。

            工作進(jìn)程在spawn后,開(kāi)始初始化,然后同樣對(duì)信號(hào)進(jìn)行處理,并且開(kāi)始輪詢,處理HTTP請(qǐng)求,調(diào)用WSGI的應(yīng)用端,得到resopnse返回。然后繼續(xù)。

            Sync同步進(jìn)程的好處在于每個(gè)request都是分離的,每個(gè)request失敗都不會(huì)影響其他request,但這樣導(dǎo)致了性能上的瓶頸。

            Tornado:

            Tornado即使一款python的開(kāi)發(fā)框架,也是一個(gè)異步非阻塞的http服務(wù)器,它本身的數(shù)據(jù)產(chǎn)出實(shí)現(xiàn)沒(méi)有遵從上文所說(shuō)的一些通用協(xié)議,因?yàn)樽陨砭褪莣eb服務(wù)器,所以動(dòng)態(tài)請(qǐng)求就直接通過(guò)內(nèi)部的機(jī)制,輸出成用戶所請(qǐng)求的動(dòng)態(tài)內(nèi)容。如果把它作為一個(gè)單獨(dú)服務(wù)器,想用它來(lái)配合其他的框架如Flask來(lái)部署,則需要采用WSGI協(xié)議,Tornado內(nèi)置了該協(xié)議,tornado.wsgi.WSGIContainer。

            wsgiref:

            Python自帶的實(shí)現(xiàn)了WSGI協(xié)議的的wsgiserver。wsgiserver可以理解為一個(gè)符合wsgi規(guī)范的webserver,接收request請(qǐng)求,封裝一系列環(huán)境變量,按照wsgi規(guī)范調(diào)用注冊(cè)的wsgiapp,最后將response返回給客戶端。Django的自帶服務(wù)器就是它了。

            以上都可以理解為實(shí)現(xiàn)!實(shí)現(xiàn)!實(shí)現(xiàn)!實(shí)現(xiàn)了協(xié)議的工具!

            注:mod_wsgi(apache的模塊)其實(shí)也是實(shí)現(xiàn)了wsgi協(xié)議的一個(gè)模塊,現(xiàn)在幾乎不廢棄了,所以也不多說(shuō)了,感興趣的自己查一下吧。

            所以如果你采用Django框架開(kāi)發(fā)了應(yīng)用之后,想部署到生產(chǎn)環(huán)境,肯定不能用Django自帶的,可以用使用uwsgi協(xié)議的uWSGI服務(wù)器,也可以采用實(shí)現(xiàn)了WSGI協(xié)議的gunicorn或者Tornado,亦可以用FastCGI、CGI模式的Nginx、lighttpd、apache服務(wù)器。其他框架亦如此!明白了這些概念在部署的時(shí)候就可以做到心中有數(shù),各種工具之間的搭配也就“知其然,并知其所以然”了。

            在我們組的項(xiàng)目中有兩種框架Django和Tornado,生產(chǎn)環(huán)境也用到了兩種部署方式。uWSGI和Gunicorn:

            Django項(xiàng)目用Nginx+uWSGI方式部署,Tornado項(xiàng)目用Nginx+Gunicorn方式部署:

            Nginx都作為負(fù)載均衡以及靜態(tài)內(nèi)容轉(zhuǎn)發(fā)。Tornado項(xiàng)目用supervisord來(lái)管理Gunicorn,用Gunicorn管理Tornado。眾所周知,由于Python的GIL存在,所以Python的并發(fā)都采用多進(jìn)程模式,所以我們部署的方式是一個(gè)核心兩個(gè)進(jìn)程。

            以上內(nèi)容為大家介紹了PythonWeb部署方式,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://www.parentadvocate.org/

            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
            請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
            免費(fèi)領(lǐng)取
            今日已有369人領(lǐng)取成功
            劉同學(xué) 138****2860 剛剛成功領(lǐng)取
            王同學(xué) 131****2015 剛剛成功領(lǐng)取
            張同學(xué) 133****4652 剛剛成功領(lǐng)取
            李同學(xué) 135****8607 剛剛成功領(lǐng)取
            楊同學(xué) 132****5667 剛剛成功領(lǐng)取
            岳同學(xué) 134****6652 剛剛成功領(lǐng)取
            梁同學(xué) 157****2950 剛剛成功領(lǐng)取
            劉同學(xué) 189****1015 剛剛成功領(lǐng)取
            張同學(xué) 155****4678 剛剛成功領(lǐng)取
            鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
            董同學(xué) 138****2867 剛剛成功領(lǐng)取
            周同學(xué) 136****3602 剛剛成功領(lǐng)取
            相關(guān)推薦HOT
            python單元測(cè)試框架unittest

            unittest是python單元測(cè)試框架,又叫做PyUnit。之所以稱為框架是它代替開(kāi)發(fā)人員完成了一些調(diào)用、IO等與單元測(cè)試無(wú)直接關(guān)系的支撐代碼,讓開(kāi)發(fā)人...詳情>>

            2023-11-07 09:57:57
            了解Python語(yǔ)言中的時(shí)間處理

            Python語(yǔ)言對(duì)于時(shí)間的處理繼承了C語(yǔ)言的傳統(tǒng),時(shí)間值是以秒為單位的浮點(diǎn)數(shù),記錄的是從1970年1月1日零點(diǎn)到現(xiàn)在的秒數(shù),這個(gè)秒數(shù)可以轉(zhuǎn)換成我們...詳情>>

            2023-11-07 09:21:57
            Python數(shù)據(jù)分析相關(guān)的技術(shù)

            1.機(jī)器學(xué)習(xí)和計(jì)算機(jī)視覺(jué)Crab:靈活、快速的推薦引擎gensim:人性化的話題建模庫(kù)hebel:GPU加速的深度學(xué)習(xí)庫(kù)NuPIC:智能計(jì)算Numenta平臺(tái)pattern...詳情>>

            2023-11-07 09:14:45
            python隊(duì)列Queue

            QueueQueue是python標(biāo)準(zhǔn)庫(kù)中的線程安全的隊(duì)列(FIFO)實(shí)現(xiàn),提供了一個(gè)適用于多線程編程的先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),即隊(duì)列,用來(lái)在生產(chǎn)者和消費(fèi)者線程...詳情>>

            2023-11-07 08:24:21
            Python和PHP的區(qū)別

            從開(kāi)發(fā)的角度來(lái)看,PHP是面向WEB的語(yǔ)言。PHP應(yīng)用程序更像是一組單獨(dú)的腳本,甚至只是一個(gè)單獨(dú)入口。而Python是多用途語(yǔ)言,也可以用于WEB開(kāi)發(fā),...詳情>>

            2023-11-07 08:02:45