當前位置:首頁 » 網頁前端 » pythonweb並發
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

pythonweb並發

發布時間: 2022-12-08 12:27:22

⑴ Python 有哪些好的 Web 框架

Django, Pyramid, Bottle, Tornado, Flask, web2py.
具體介紹如下:
Django:開源Web開發框架,它鼓勵快速開發,並遵循MVC設計,開發周期短。
Tornado:一個輕量級的Web框架,內置非阻塞式伺服器,而且速度相當快
webpy:一個小巧靈活的Web框架,雖然簡單但是功能強大。
Flask:一個使用 Python 編寫的輕量級 Web 應用框架。其 WSGI 工具箱採用 Werkzeug ,模板引擎則使用 Jinja2 。
Bottle:一個Python Web框架,整個框架只有一個文件,幾十K,卻自帶了路徑映射、模板、簡單的資料庫訪問等web框架組件,確實是個可用的框架。初學web開發可以拿來玩玩,其語法簡單,部署也很方便。

⑵ python高並發web框架有哪些

python 就不能考慮高並發
gevent 焦作人
另外 pypy+tornado 有驚喜,42w 7IP 懂的自然懂,內存佔用沒記錯是10k+/Conn

⑶ python web 怎麼部署

學過PHP的都了解,php的正式環境部署非常簡單,改幾個文件就OK,用FastCgi方式也是分分鍾的事情。相比起來,Python在web應用上的部署就繁雜的多,主要是工具繁多,主流伺服器支持不足,在了解Python的生產環境部署方式之前,先明確一些概念!很重要!

CGI:

CGI即通用網關介面(Common Gateway Interface),是外部應用程序(CGI程序)與Web伺服器之間的介面標准,是在CGI程序和Web伺服器之間傳遞信息的規程。CGI規范允許Web伺服器執行外部程序,並將它們的輸出發送給Web瀏覽器,CGI將Web的一組簡單的靜態超媒體文檔變成一個完整的新的互動式媒體。通俗的講CGI就像是一座橋,把網頁和WEB伺服器中的執行程序連接起來,它把HTML接收的指令傳遞給伺服器的執行程序,再把伺服器執行程序的結果返還給HTML頁。CGI的跨平台性能極佳,幾乎可以在任何操作系統上實現。

CGI方式在遇到連接請求(用戶請求)先要創建cgi的子進程,激活一個CGI進程,然後處理請求,處理完後結束這個子進程。這就是fork-and-execute模式。所以用cgi方式的伺服器有多少連接請求就會有多少cgi子進程,子進程反復載入是cgi性能低下的主要原因。當用戶請求數量非常多時,會大量擠占系統的資源如內存,CPU時間等,造成效能低下。

CGI腳本工作流程:

  • 瀏覽器通過HTML表單或超鏈接請求指向一個CGI應用程序的URL。

  • 伺服器執行務器收發到請求。所指定的CGI應用程序。

  • CGI應用程序執行所需要的操作,通常是基於瀏覽者輸入的內容。

  • CGI應用程序把結果格式化為網路伺服器和瀏覽器能夠理解的文檔(通常是HTML網頁)。

  • 網路伺服器把結果返回到瀏覽器中。

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

    FastCGI:

    FastCGI是一個可伸縮地、高速地在HTTP server和動態腳本語言間通信的介面。多數流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同時,FastCGI也被許多腳本語言所支持,其中就有Python。FastCGI是從CGI發展改進而來的。傳統CGI介面方式的主要缺點是性能很差,因為每次HTTP伺服器遇到動態程序時都需要重新啟動腳本解析器來執行解析,然後結果被返回給HTTP伺服器。這在處理高並發訪問時,幾乎是不可用的。FastCGI像是一個常駐(long-live)型的CGI,它可以一直執行著,只要激活後,不會每次都要花費時間去fork一次(這是CGI最為人詬病的fork-and-execute 模式)。CGI 就是所謂的短生存期應用程序,FastCGI 就是所謂的長生存期應用程序。由於 FastCGI 程序並不需要不斷的產生新進程,可以大大降低伺服器的壓力並且產生較高的應用效率。它的速度效率最少要比CGI 技術提高 5 倍以上。它還支持分布式的運算, 即 FastCGI 程序可以在網站伺服器以外的主機上執行並且接受來自其它網站伺服器來的請求。

    FastCGI是語言無關的、可伸縮架構的CGI開放擴展,其主要行為是將CGI解釋器進程保持在內存中並因此獲得較高的性能。眾所周知,CGI解釋器的反復載入是CGI性能低下的主要原因,如果CGI解釋器保持在內存中並接受FastCGI進程管理器調度,則可以提供良好的性能、伸縮性、Fail-Over特性等等。FastCGI介面方式採用C/S結構,可以將HTTP伺服器和腳本解析伺服器分開,同時在腳本解析伺服器上啟動一個或者多個腳本解析守護進程。當HTTP伺服器每次遇到動態程序時,可以將其直接交付給FastCGI進程來執行,然後將得到的結果返回給瀏覽器。這種方式可以讓HTTP伺服器專一地處理靜態請求或者將動態腳本伺服器的結果返回給客戶端,這在很大程度上提高了整個應用系統的性能。

    FastCGI的工作流程:

  • Web Server啟動時載入FastCGI進程管理器(PHP-CGI或者PHP-FPM或者spawn-cgi)

  • FastCGI進程管理器自身初始化,啟動多個CGI解釋器進程(可見多個php-cgi)並等待來自Web Server的連接。

  • 當客戶端請求到達Web Server時,FastCGI進程管理器選擇並連接到一個CGI解釋器。Web server將CGI環境變數和標准輸入發送到FastCGI子進程php-cgi。

  • FastCGI子進程完成處理後將標准輸出和錯誤信息從同一連接返回Web Server。當FastCGI子進程關閉連接時,請求便告處理完成。FastCGI子進程接著等待並處理來自FastCGI進程管理器(運行在Web Server中)的下一個連接。 在CGI模式中,php-cgi在此便退出。

  • FastCGI 的特點:

  • 打破傳統頁面處理技術。傳統的頁面處理技術,程序必須與 Web 伺服器或 Application 伺服器處於同一台伺服器中。這種歷史已經早N年被FastCGI技術所打破,FastCGI技術的應用程序可以被安裝在伺服器群中的任何一台伺服器,而通過 TCP/IP 協議與 Web 伺服器通訊,這樣做既適合開發大型分布式 Web 群,也適合高效資料庫控制。

  • 明確的請求模式。CGI 技術沒有一個明確的角色,在 FastCGI 程序中,程序被賦予明確的角色(響應器角色、認證器角色、過濾器角色)。

  • WSGI:

    PythonWeb伺服器網關介面(Python Web Server Gateway Interface,縮寫為WSGI)是為Python語言定義的Web伺服器和Web應用程序或框架之間的一種簡單而通用的介面。自從WSGI被開發出來以後,許多其它語言中也出現了類似介面。WSGI是作為Web伺服器與Web應用程序或應用框架之間的一種低級別的介面,以提升可移植Web應用開發的共同點。WSGI是基於現存的CGI標准而設計的。

    WSGI區分為兩個部份:一為「伺服器」或「網關」,另一為「應用程序」或「應用框架」。在處理一個WSGI請求時,伺服器會為應用程序提供環境上下文及一個回調函數(Callback Function)。當應用程序完成處理請求後,透過先前的回調函數,將結果回傳給伺服器。所謂的 WSGI 中間件同時實現了API的兩方,因此可以在WSGI服務和WSGI應用之間起調解作用:從WSGI伺服器的角度來說,中間件扮演應用程序,而從應用程序的角度來說,中間件扮演伺服器。「中間件」組件可以執行以下功能:

  • 重寫環境變數後,根據目標URL,將請求消息路由到不同的應用對象。

  • 允許在一個進程中同時運行多個應用程序或應用框架。

  • 負載均衡和遠程處理,通過在網路上轉發請求和響應消息。

  • 進行內容後處理,例如應用XSLT樣式表。

  • 以前,如何選擇合適的Web應用程序框架成為困擾Python初學者的一個問題,這是因為,一般而言,Web應用框架的選擇將限制可用的Web伺服器的選擇,反之亦然。那時的Python應用程序通常是為CGI,FastCGI,mod_python中的一個而設計,甚至是為特定Web伺服器的自定義的API介面而設計的。WSGI沒有官方的實現, 因為WSGI更像一個協議。只要遵照這些協議,WSGI應用(Application)都可以在任何伺服器(Server)上運行, 反之亦然。WSGI就是Python的CGI包裝,相對於Fastcgi是PHP的CGI包裝。

    WSGI將 web 組件分為三類: web伺服器,web中間件,web應用程序, wsgi基本處理模式為 : WSGI Server -> (WSGI Middleware)* -> WSGI Application 。

    uwsgi:

    uwsgi協議是一個uWSGI伺服器自有的協議,它用於定義傳輸信息的類型(type of information),每一個uwsgi packet前4byte為傳輸信息類型描述,它與WSGI相比是兩樣東西。據稱其效率是fcgi的10倍。具體的協議內容請參考:the uwsgi protocol

    以上四者都可以理解為協議!協議!協議!實現了這樣的協議,就可以實現Web伺服器與Web應用程序相關聯的web服務!

    uWSGI:

    uWSGI項目旨在為部署分布式集群的網路應用開發一套完整的解決方案。uWSGI主要面向web及其標准服務,已經成功的應用於多種不同的語言。由於uWSGI的可擴展架構,它能夠被無限制的擴展用來支持更多的平台和語言。目前,你可以使用C,C++和Objective-C來編寫插件。項目名稱中的「WSGI」是為了向同名的Python Web標准表示感謝,因為WSGI為該項目開發了第一個插件。uWSGI是一個Web伺服器,它實現了WSGI協議、uwsgi、http等協議。uWSGI,既不用wsgi協議也不用FastCGI協議,而是自創了上文說將的uwsgi協議。

    uWSGI的主要特點如下:

  • 超快的性能。

  • 低內存佔用(實測為apache2的mod_wsgi的一半左右)。

  • 多app管理。

  • 詳盡的日誌功能(可以用來分析app性能和瓶頸)。

  • 高度可定製(內存大小限制,服務一定次數後重啟等)。

  • Gunicorn:

    和uWSGi類似的工具,從rails的部署工具(Unicorn)移植過來的。但是它使用的協議是前文所講的WSGI,這是python2.5時定義的官方標准(PEP 333),根紅苗正,而且部署比較簡單,詳細的使用教程請點擊這里。Gunicorn採用prefork模式,Gunicorn 伺服器與各種 Web 框架兼容,只需非常簡單的執行,輕量級的資源消耗,以及相當迅速。它的特點是與 Django 結合緊密,部署特別方便。 缺點也很多,不支持 HTTP 1.1,並發訪問性能不高,與 uWSGI,Gevent 等有一定的性能差距。

    1. Gunicorn設計

    Gunicorn 是一個 master進程,spawn 出數個工作進程的 web 伺服器。master 進程式控制制工作進程的產生與消亡,工作進程只需要接受請求並且處理。這樣分離的方式使得 reload 代碼非常方便,也很容易增加或減少工作進程。 工作進程這塊作者給了很大的擴展餘地,它可以支持不同的IO方式,如 Gevent,Sync 同步進程,Asyc 非同步進程,Eventlet 等等。master 跟 worker 進程完全分離,使得 Gunicorn 實質上就是一個控制進程的服務。

    2. Gunicorn源碼結構

    從 Application.run() 開始,首先初始化配置,從文件讀取,終端讀取等等方式完成 configurate。然後啟動 Arbiter,Arbiter 是實質上的 master 進程的核心,它首先從配置類中讀取並設置,然後初始化信號處理函數,建立 socket。然後就是開始 spawn 工作進程,根據配置的工作進程數進行 spawn。然後就進入了輪詢狀態,收到信號,處理信號然後繼續。這里喚醒進程的方式是建立一個 PIPE,通過信號處理函數往 pipe 里 write,然後 master 從 select.select() 中喚醒。

    工作進程在 spawn 後,開始初始化,然後同樣對信號進行處理,並且開始輪詢,處理 HTTP 請求,調用 WSGI 的應用端,得到 resopnse 返回。然後繼續。

    Sync 同步進程的好處在於每個 request 都是分離的,每個 request 失敗都不會影響其他 request,但這樣導致了性能上的瓶頸。

    Tornado:

    Tornado即使一款python 的開發框架,也是一個非同步非阻塞的http伺服器,它本身的數據產出實現沒有遵從上文所說的一些通用協議,因為自身就是web伺服器,所以動態請求就直接通過內部的機制,輸出成用戶所請求的動態內容。如果把它作為一個單獨伺服器,想用它來配合其他的框架如Flask來部署,則需要採用WSGI協議,Tornado內置了該協議,tornado.wsgi.WSGIContainer。

    wsgiref:

    Python自帶的實現了WSGI協議的的wsgi server。wsgi server可以理解為一個符合wsgi規范的web server,接收request請求,封裝一系列環境變數,按照wsgi規范調用注冊的wsgi app,最後將response返回給客戶端。Django的自帶伺服器就是它了。

    以上都可以理解為實現!實現!實現!實現了協議的工具!

    註:mod_wsgi(apache的模塊)其實也是實現了wsgi協議的一個模塊,現在幾乎不廢棄了,所以也不多說了,感興趣的自己查一下吧。

    所以如果你採用Django框架開發了應用之後,想部署到生產環境,肯定不能用Django自帶的,可以用使用uwsgi協議的uWSGI伺服器,也可以採用實現了WSGI協議的gunicorn或者Tornado,亦可以用FastCGI、CGI模式的Nginx、lighttpd、apache伺服器。其他框架亦如此!明白了這些概念在部署的時候就可以做到心中有數,各種工具之間的搭配也就「知其然,並知其所以然」了。

    在我們組的項目中有兩種框架Django和Tornado,生產環境也用到了兩種部署方式。uWSGI和Gunicorn:

    Django項目用Nginx+uWSGI方式部署,Tornado項目用Nginx+Gunicorn方式部署:

    Nginx都作為負載均衡以及靜態內容轉發。Tornado項目用supervisord來管理Gunicorn,用Gunicorn管理Tornado。眾所周知,由於Python的GIL存在,所以Python的並發都採用多進程模式,所以我們部署的方式是一個核心兩個進程。

⑷ Python web伺服器怎麼處理請求

web伺服器處理連接請求的四種架構方式:

1、單線程web伺服器

此種架構方式中,web伺服器一次處理一個請求,結束後讀取並處理下一個請求。在某請求處理過程中,其它所有的請求將被忽略,因此,在並發請求較多的場景中將會出現嚴重的必能問題。

相關推薦:《Python教程》

2、多進程/多線程web伺服器

此種架構方式中,web伺服器生成多個進程或線程並行處理多個用戶請求,進程或線程可以按需或事先生成。有的web伺服器應用程序為每個用戶請求生成一個單獨的進程或線程來進行響應,不過,一旦並發請求數量達到成千上萬時,多個同時運行的進程或線程將會消耗大量的系統資源。

3、I/O多路復用web伺服器

為了能夠支持更多的並發用戶請求,越來越多的web伺服器正在採用多種復用的架構——同步監控所有的連接請求的活動狀態,當一個連接的狀態發生改變時(如數據准備完畢或發生某錯誤),將為其執行一系列特定操作;在操作完成後,此連接將重新變回暫時的穩定態並返回至打開的連接列表中,直到下一次的狀態改變。由於其多路復用的特性,進程或線程不會被空閑的連接所佔用,因而可以提供高效的工作模式。

4、多路復用多線程web伺服器

將多進程和多路復用的功能結合起來形成的web伺服器架構,其避免了讓一個進程服務於過多的用戶請求,並能充分利用多CPU主機所提供的計算能力。 web伺服器自身並不處理任何動態內容,它是如何響應客戶端的動態內容請求呢? 通過某種協議調用額外的其它進程來運行這個動態頁面,並將結果取回來以後返回給WEB伺服器,進而響應客戶端。

⑸ 《PythonWeb開發實戰》epub下載在線閱讀,求百度網盤雲資源

《Python Web開發實戰》(董偉明)電子書網盤下載免費在線閱讀

資源鏈接:

鏈接:https://pan..com/s/1M3m58ZOZ2PMOpXWV6ODBBA

提取碼:rgf4

書名:Python Web開發實戰

作者:董偉明

豆瓣評分:7.1

出版社:電子工業出版社

出版年份:2016-9-15

頁數:504

內容簡介:

這本書涵蓋了Web開發的方方面面,可以分為如下部分:

1. 使用最新的Flask 0.11進行Web開發,學習Jinja2、Flask-Script、Flask-Migrate、Flask-Security、Flask-Assets等8種常用擴展,幫助讀者理解Flask 的 優秀設計(上下文、BluePrint等),最後利用Mako、Flask_mako、SQLAlchemy、Pillow等技術實現一個豆瓣一個真實的服務。

2. 闡述筆者對REST的理解,並提出一些設計API的注意事項,最後通過jQuery和fetch實現使用Ajax的例子,讓讀者了解如何讓前後端通信。

3. 對Python應用伺服器,Web伺服器、緩存系統、鍵值對資料庫等技術的選型和使用方法,最後演示大型網站架構及其重要組件的用意。

4. 使用Fabric、SaltStack、Ansible、Supervisor、Graphite等做系統管理,並演示一個通過最新的Sentry 8演示如何收集應用錯誤信息。

5. 測試和持續集成,最後使用最新的Buildbot 0.9實現一個Github項目的持續集成。

6. 深入RabbitMQ和Celery的原理和使用方法,最後分享筆者使用的進階實踐。

7. 服務化及豆瓣服務化實踐。

8. 詳細講解豆瓣工程師都在用的DPark,包含安裝、環境配置、使用和框架化分析uv&pv,接著將展示幾個筆者實際工作中的數據報表需求,並講解如何用Pandas做數據可視化。

9. 深入IPython和Jupyter Notebook這兩個工具,並分享在豆瓣對應的實踐。

10. 從獲取Linux伺服器的相關情況、性能測試、分析Python程序性能瓶頸三個方面展示對應的工具及使用方法。

11. 以抓取微信公眾號文章為主線,分別使用多線程、多進程、Gevent、Future和asyncio這5種編程方式完成不同階段的爬取任務,也深入地分析在它們之間如何選擇。

12. Python進階和Web項目經驗。

封底推薦語

偉明把他個人多年 Web 開發的經驗,以及豆瓣十年來數百名優秀工程師在 Web 開發上最佳實踐的積累,凝聚在了《Python Web 開發實戰》這本書里,多維度、全面地介紹了 Python Web 開發涉及的各種技術。我向所有有興趣使用 Python 做 Web 開發的開發者們,強烈推薦此書。——洪強寧,愛因互動CTO,前豆瓣首席架構師,前宜信大數據創新中心首席架構師

感謝偉明把豆瓣的一些工程實踐進行了整理和總結,這是本書最寶貴的一點,庫誰都會用,但在什麼場景使用,在生產環境中這個庫的表現到底如何,是這本書的一個精華,期望將來還可以看到越來越多這樣的圖書,祝此書大賣。——清風,SAY CEO,前豆瓣技術總監。

偉明將自身在 Web 領域所有方面的經驗提煉後整理成書,本質上是將幾十個關聯產品的官方文檔,結合具體工程經驗進行了梳理,給出了領域問題最佳方案的關鍵思考點和自己的答案,而更加可貴的是,給出了這些思考點的來源,以及形成過程,即給出了解決各種 Web 領域問題的思維模式。——Zoom.Quiet(大媽),優視眼動科技 CTO,Python 中文社區創始人之一和管理員

閱讀本書,我最大的感受就是:全和新。本書的內容涉及了Web框架、Ajax的前後端交互、測試、資料庫、數據分析、服務化、部署、系統管理、常用工具等內容,有點網路全書的意味。另外,書中講的許多東西都是現在正在流行的技術或工具,像Flask、Celery、Jupyter、Supervisor、SaltStack、Pandas等。——李迎輝,Python開源資深行者,Python-CN郵件列表創建人,UliPad和Uliweb作者

本書由Python開發開始,循序漸進,把網站工程的全貌展現在讀者的眼前,是了解Web工程從開發到上線完整流程的絕佳參考書籍。——邢犇(CNBorn), 前豆瓣東西技術負責人

很多剛進入Python世界的人,偉明的這本書提供了一個非常好的「知識地圖」,書中涉及了Python Web開發的方方面面。——胡陽(the5fire),手機搜狐網,任資深開發工程師

這本書從開發環境的搭建,Web 框架的使用,到最後的持續集成和 Python 的進階用法,無一不是他多年的實際工程經驗總結,十分寶貴。——姚鋼強(acmerfight),知乎工程師

這本書非常全面地介紹了使用 Python 進行 Web 開發的方方面面,既有 Web 框架、緩存、消息隊列、並發處理的場景介紹和技術選型,又有開發流程、質量保證的豐富實戰經驗。——蔡斌(VeryCB),DeepDevelop工程師,前豆瓣條目組技術負責人

整本書都是作者對實際Web項目中大量實戰經驗的總結,絕非紙上談兵。相信通過閱讀該書可以幫助開發者規避掉大量項目中的「坑」,構建出更高性能、更穩定的Web項目。——Spawnris, 騰訊工程師

作者簡介:

作者是豆瓣條目組高級產品開發工程師,主要負責豆瓣讀書(對,你沒有看錯,就是這個網站)、電影、音樂、東西等產品線。從2011年開始接觸Python, 從運維、運維開發到現在的Web開發,積累了豐富的運維和開發經驗,這本書將作者這些年使用Python進行Web開發,對各方面知識的理解和積累的經驗進行梳理和總結。

⑹ python主要可以做什麼

現在互聯網發展迅速,眾多行業巨頭,都已經轉投到人工智慧領域,而人工智慧的首選編程語言就是python,所以學好Python能夠從事的工作還是很多的,而且前景非常不錯。

學完python可以應用於以下領域:

①Web 和 Internet開發

②科學計算和統計

③人工智慧

④桌面界面開發

⑤軟體開發

⑥後端開發

⑦網路爬蟲

可以從事的崗位也很多,比如Python爬蟲工程師,大數據工程師等等!

互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。

想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。

祝你學有所成,望採納。