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

python編寫web配置

發布時間: 2022-10-25 03:33:42

㈠ 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開發

1.python入門
推薦老齊《從零開始學python》,《python簡明教程》,這兩本書很適合小白入門(像我一樣長期徘徊在編程門外的人)
2.python進階
推薦《python學習手冊》,python學習手冊的前半部分與在入門教程中的基礎部分相重復,後面部分對python的介紹更細致,比如面向對象的這部分對於小白理解相對容易。
還有一本《python cookbook》,這本是在講述python的經典用法,目前讀過函數,裝飾器以及網路編程這三部分,在不斷的敲玩具代碼的過程中,會發現書中講的例子不斷會出現。
3.學習web開發,自然要涉及到基於python的web 框架。
1)flask
flask如同官方所描述的那樣,是一個web微框架,用幾行代碼就可以實現一個在hello world,現在的個人感覺是flask確實適合新手入門。基於這個原則,
推薦《flask web 開發》這本書,這本書簡直是良心,講的很細,並且在github上有源碼,可以很容易跟著作者的步驟去學習,不懂得的地方可以去問谷歌或者qq群。
推薦的第二本是《building web applications with flask》這本書是對flask框架的細化,深入講解flask的模板,restful等等,雖然是英文,但是葉能順利閱讀下去
推薦的第三本是《flask Framework cookbook》,這三本書是一個不段進階的部分。
2)django
django是大而全,開箱即用,在flask了解的差不多的時候去了解,畢竟生成環境用的django相對多一點。
django學習可以看得書:(1)tango with django只有一個應用去學習,對於新手友好,可以比對github源碼
(2)django by example 注重實戰,有幾個實例,blog, shop etc,涉及django基礎,redis,celery,solr,ajax,很全面,也是web開發常用的技術
4.在學習框架的過程中,會不斷體會到前端的知識也是要補回來,可以w3c school看一下。
5.資料庫,在python中內置了sqlite, sql命令有相同之處,路線是sqlite, mysql, mongodb,有個逐漸過度的過程。
6.了解http的具體工作流程,這點目前還是有點模糊
7.工具集:sublime(需要配置,主要用於python編程,神器誰用誰知道), vim, firebug, firefox, linux,github(代碼大寶庫,各種代碼)
8.學習的過程覺得幾點很重要
1)做好筆記,同樣的問題會遇到第二次,有個筆記容易復查
2)善用谷歌,善用qq與論壇,你現在遇到的問題,大多數前人都遇到過,stackflow是個好地方
3)迷茫的時候還是堅持看,因為畢竟是小白,不懂的太多,你總要把他弄懂
4)有時間了可以把演算法與數據結構補起來

㈢ 怎麼用python搭建一個最簡單的Web伺服器

利用Python自帶的包可以建立簡單的web伺服器。在DOS里cd到准備做伺服器根目錄的路徑下,輸入命令:

python -m Web伺服器模塊 [埠號,默認8000]
例如:

python -m SimpleHTTPServer 8080
然後就可以在瀏覽器中輸入

http://localhost:埠號/路徑

來訪問伺服器資源。
例如:
http://localhost:8080/index.htm(當然index.htm文件得自己創建)
其他機器也可以通過伺服器的IP地址來訪問。

㈣ 如何用python做web開發 django環境配置

下載
python-2.7.2.msi
Django-1.3.1.tar.gz

Django暫時只支持python 2.4 ~ 2.7, 在Django-1.3.1\docs\intro\install.txt中有說明:
Being a Python Web framework, Django requires Python. It works with any Python
version from 2.4 to 2.7 (e to backwards
incompatibilities in Python 3.0, Django does not currently work with
Python 3.0;
安裝python-2.7.2,並添加環境變數
D:\Python27;D:\Python27\Scripts;
命令行進入Django-1.3.1目錄, 安裝django
python setup.py install
Django提供了tutorial
Django-1.3.1\docs\intro

新建站點
E:\python>django-admin.py startproject mysite
啟動django自帶的web伺服器
E:\python>cd mysite
E:\python\mysite>manage.py runserver
Validating models...

0 errors found
Django version 1.3.1, using settings 'mysite.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
在瀏覽器中輸入 http://127.0.0.1:8000/ 瀏覽頁面
ps:
在windows7中按上述步驟配置好後,出現下列情況

D:\work\python>django-admin.py startproject mysite
Usage: django-admin.py subcommand [options] [args]

...
很顯然django-admin.py不參識別startproject命令,其它命令也不能識別。不過,另一種方式卻可以
D:\Python27\Scripts>python django-admin.py startproject mysite
這說明django-admin.py 後面的參數不能傳遞進去,可以通過修改注冊表實現。
輸入regedit, 進入 HKEY_CLASSES_ROOT\py_auto_file\shell\open\command , "C:\Python26\python.exe" "%1" change it to "C:\Python26\python.exe" "%1" %*
成功解決了

㈤ 如何用python做web開發 django環境配置

下載
python-2.7.2.msi
Django-1.3.1.tar.gz
Django暫時只支持python
2.4
~
2.7,
在Django-1.3.1\docs\intro\install.txt中有說明:
Being
a
Python
Web
framework,
Django
requires
Python.
It
works
with
any
Python
version
from
2.4
to
2.7
(e
to
backwards
incompatibilities
in
Python
3.0,
Django
does
not
currently
work
with
Python
3.0;
安裝python-2.7.2,並添加環境變數
D:\Python27;D:\Python27\Scripts;
命令行進入Django-1.3.1目錄,
安裝django
python
setup.py
install
Django提供了tutorial
Django-1.3.1\docs\intro
新建站點
E:\python>django-admin.py
startproject
mysite
啟動django自帶的web伺服器
E:\python>cd
mysite
E:\python\mysite>manage.py
runserver
Validating
models...
0
errors
found
Django
version
1.3.1,
using
settings
'mysite.settings'
Development
server
is
running
at
http://127.0.0.1:8000/
Quit
the
server
with
CTRL-BREAK.
在瀏覽器中輸入
http://127.0.0.1:8000/
瀏覽頁面
ps:
在windows7中按上述步驟配置好後,出現下列情況
D:\work\python>django-admin.py
startproject
mysite
Usage:
django-admin.py
subcommand
[options]
[args]
...
很顯然django-admin.py不參識別startproject命令,其它命令也不能識別。不過,另一種方式卻可以
D:\Python27\Scripts>python
django-admin.py
startproject
mysite
這說明django-admin.py
後面的參數不能傳遞進去,可以通過修改注冊表實現。
輸入regedit,
進入
HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

"C:\Python26\python.exe"
"%1"
change
it
to
"C:\Python26\python.exe"
"%1"
%*
成功解決了

㈥ 如何用Python寫一個web框架

STEP.1

我們首先得選擇基於什麼協議來寫這種框架。我們可以選擇CGI協議,或者是WSGI介面。如果使用CGI,實際上我們只是按著CGI的規范寫了一個python程序,然後每次伺服器收到請求,就fork一個程序來執行它,然後返回一個http文檔,性能比較低下。對於WSGI,而是一個存在於伺服器和應用間的介面,在WSGI之前,web應用都是依賴於伺服器的,現在流行的python框架都支持WSGI介面。

STEP.2 PEP-333

這一段是PEP-333 所提供的樣例代碼。

def simple_app(environ, start_response):
"""Simplest possible application object"""
status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
start_response(status, response_headers)
return ['Hello world! ']

這里的application被傳入了兩個值。

  • environ

  • start_response。
    environ是一個字典,保存了http請求的信息。
    start_response是一個函數,發送http響應。她有兩個參數status 和 start_headers。

  • status必須是由狀態編號和具體信息組成的字元串,必須符合RFC 2616。

  • start_headers是一個(header_name,header_value) 元組的列表元組列表。其中的hearder_name必須是合法的http header欄位名。在RFC 2616, Section 4.2中有詳細定義。
    當然官方還給出了類的實現。

  • def __init__(self, environ, start_response):


  • self.environ = environ


  • self.start = start_response

  • def __iter__(self):


  • status = '200 OK'


  • response_headers = [('Content-type','text/plain')]


  • self.start(status, response_headers)


  • yield "Hello world! "

  • 了解了如上信息後,基本上可以開始了。我們就到官方給的代碼上進行修改吧。

    STEP.3 將路徑鏈接到函數

    首先我們得把用戶請求的路徑,鏈接到函數。我們可以實現一個getPage方法,專門做這件事。我們所擁有的信息,只有environ['PATH_INFO']。

  • urls = [('^/index/$','func_index'),

  • ('^/comment/$','func_comment'),

  • ('^/environ/$','get_environ'),

  • ('^/post/$','post_test')]#urls是提供給app開發者來做鏈接的。

  • def getPage(self):

  • path = self.environ['PATH_INFO']

  • for pattern in self.urls:

  • m = re.match(pattern[0],path)#將urls元素的第0項和path進行比對,如果匹配上了,返回函數名

  • if m:

  • function = getattr(self,pattern[1])#getattr方法來得到函數

  • return function()

  • return '404 not found'#沒匹配上任何東西

  • 寫到這里之後,每次添加頁面,就只需要在urls列表中添加一個元祖就行了。

    STEP.4 獲取模版

    既然是寫web app,模版肯定是得有的。這里我提供了一種getTemplate方法來做這件事。不過我只提供了變數的替換。

  • def getTemplate(self,tem_name,rep=0):

  • #這個函數返回內容,tem_name是文件名字

  • #參數rep是一個字典,默認為0

  • f = open('template/'+tem_name)

  • html = f.read()

  • if(rep!=0):

  • for to_replace in rep:

  • strinfo = re.compile('{\%s*'+str(to_replace)+'s*\%}')

  • html = strinfo.sub(rep[to_replace],html)

  • return html

  • STEP.5 POST數據的處理

    要想獲取POST數據,我們得通過environ['wsgi.input']來處理。而他實際上就是系統的標准輸入。

  • environ['wsgi.input'] = sys.stdin

  • 知道這點後就很好寫了。

  • def getPost(self):

  • if(self.environ['REQUEST_METHOD'] == 'POST'):

  • try:

  • request_body_size = int(self.environ.get('CONTENT_LENGTH', 0))#讀出content_length的值

  • except:

  • request_body_size = 0

  • request_body = self.environ['wsgi.input'].read(request_body_size) #請求的body

  • post_data = parse_qs(request_body)#parse_qs是cgi提供的方法,幫助我們處理請求

  • return post_data

  • 資料庫的鏈接

  • import MySQLdb

  • class Model(object):

  • def __init__(self):

  • self.host = 'localhost'

  • self.port = 3306

  • self.user = 'admin'

  • self.passwd = 'admin'

  • self.db = 'xieyi'

  • def build_connect(self):

  • self.conn = MySQLdb.connect(

  • host = self.host,

  • port = self.port,

  • user = self.user,

  • passwd = self.passwd,

  • db = self.db

  • )

  • def exec_ins(self,ins):

  • cur = self.conn.cursor()

  • num = cur.execute(ins)

  • info = {}

  • if(num>0):

  • info = cur.fetchmany(num)

  • cur.close()

  • self.conn.commit()

  • return info

  • def close(self):

  • self.conn.close()

  • STEP.6 清理工作

    很多配置如果放到代碼中,會增加閱讀負擔。於是把urls,model抽取出來。
    使得配置更加方便。



㈦ 如何部署python web程序

Python Web 程序的部署方案
綜合而言, 高性能的Python web站點部署方式首推 nginx + uwsgi
apache + mod_wsgi 是簡單穩定但性能一般的方式
API伺服器 可以直接使用tornado或者gevent
mod_python
非常原始的cgi模式部署python已經沒有什麼好介紹了。對於不太追求性能的管理系統和網站來說,使用 Apache 部署是一個不錯的選擇。較早的時候,使用 mode_python 部署python的web應用十分流行,在Django 0.96 的時候官方文檔甚至推薦這種方式。
它將Python解釋器嵌入到Apache server,以提供一個訪問Apache server內部的介面。mod_python 在現在看來性能是不佳的,每一個http請求 mod_python 都會由一個進程初始化python解釋器、載入代碼、執行、然後銷毀進程。
mod_wsgi
如果非要用Apache來部署python應用,mod_wsgi是一個更好的選擇。WSGI 全稱是 Web Server Gateway Interface ,由 PEP-333 定義。 基本上所有的python web框架都實現了wsgi介面,用mod_wsgi 能部署任何實現了wsgi的框架。實際上,不需要任何框架也可以用mod_wsgi 部署python程序。使用mod_wsgi的daemon模式,python程序會常駐內存,不會有很大的初始化和銷毀進程方面的開銷,所以性能是好於mod_python的。綜合來說,使用Apache部署python web程序,推薦使用mod_wsgi的daemon模式。
Fastcgi
先說觀點:不建議用fastcgi的方式部署Python web。
前幾年由於lighttpd風頭正勁和豆瓣的成功案例,fastcgi是一種很流行的部署方式。fastcgi與具體語言無關,也與web伺服器無關。是一種通用的部署方式。fastcgi是對於cgi的增強,CGI程序運行在獨立的進程中,並對每個Web請求建立一個進程。面對大量請求,進程的大量建立和消亡使操作系統性能大大下降。
與為每個請求創建一個新的進程不同,FastCGI使用持續的進程來處理一連串的請求。這些進程由FastCGI伺服器管理,而不是web伺服器。 當進來一個請求時,web伺服器把環境變數和這個頁面請求通過一個socket比如FastCGI進程與web伺服器都位於本地)或者一個TCP connection(FastCGI進程在遠端的server farm)傳遞給FastCGI進程。
主流的web伺服器,Apache,lighttpd,nginx 都支持fastcgi,在幾年前,lighttpd的mod_fcgi模塊性能強勁,lighttpd+fastcgi十分流行。無論是python,ruby還是php,都有大量的站點使用這種方式部署。由於nginx的崛起,現在很少有人使用lighttpd了。
fastcgi 並不是專門為python設計,並不是所有的python框架天然的支持fastcgi,通常需要flup這樣的容器來配適。flup由python編寫,和專門的c實現的wsgi容器比起來性能顯得相當不堪。fastcgi的穩定性對於新興的wsgi容器來說也有差距。無論從哪個方面來看,部署python web程序,fastcgi 都已經是過去式。
uwsgi
前幾年nginx還未內置uwsgi模塊的時候,部署uwsgi還是一件挺麻煩的事情。隨著能夠在nginx中直接使用uwsgi模塊,uwsgi已經是最可靠,最方便的高性能python web程序的部署方式了。
在1U的四核XEON伺服器上,一個簡單的wsgi handler甚至能用AB壓到8000以上的qps,這已經是完爆tornado,接近gevent的性能了。 同時,uwsgi的穩定性極好。之前我們有個每天500w-1000w動態請求的站點使用uwsgi部署非常穩定,在一個渣HP 1U 伺服器上,基本不用管它。
上面提到的部署方式都是相對於web網站的方式,在移動互聯網的時代,我們需要的是高性能的API服務,上面這些都是過時的東西。
tornado
tornado 號稱高性能,如果拿他寫網站,其實一般般,只不過跟uwsgi加一些簡單框架差不多而已。它真正的作用,是用來寫API伺服器和長連接的伺服器。
由於tornado能夠直接處理http請求,很多人直接拿他來裸奔直接提供服務。這種方式是不可取的,單線程的tornado只能利用cpu的一個核心,並且一旦阻塞直接就廢了。通常情況下,由supervisor啟動多個tornado進程,通過nginx進行反向代理負載均衡。nginx 1.14 以後的版本反向代理支持長連接,配合tornado的comet效果很好。
tornado還有一些比較奇葩的用法,比如用來做wsgi容器之類的。
gevent
gevent是一個神器,能做的事情很多。在web方面,處理http請求,用起來其實跟tornado差不多,但是要簡陋很多,cookie之類的都沒有。用gevent寫的一些API服務,部署方式還是類似tornado,用supervisor管理多個守護進程,通過nginx做負載均衡。 同樣的它的奇葩用法也和tornado一樣,可以當wsgi容器用。

㈧ python3.5裡面怎麼搭建簡單的web伺服器

python3.5裡面怎麼搭建簡單的web伺服器
利用Python自帶的包可以建立簡單的web伺服器。在DOS里cd到准備做伺服器根目錄的路徑下,輸入命令:
python -m Web伺服器模塊 [埠號,默認8000]
例如:
python -m SimpleHTTPServer 8080
然後就可以在瀏覽器中輸入
h ttp://loca lhost:埠號/路徑
來訪問伺服器資源。
例如:
h ttp://local host:808 0/index.h tm(當然index.htm文件得自己創建)
其他機器也可以通過伺服器的IP地址來訪問。

這里的「Web伺服器模塊」有如下三種:

BaseHTTPServer: 提供基本的Web服務和處理器類,分別是HTTPServer和BaseHTTPRequestHandler。
SimpleHTTPServer: 包含執行GET和HEAD請求的SimpleHTTPRequestHandler類。
CGIHTTPServer: 包含處理POST請求和執行CGIHTTPRequestHandler類。

㈨ 如何用python搭建一個最簡單的Web伺服器

利用Python自帶的包可以建立簡單的web伺服器。在DOS里cd到准備做伺服器根目錄的路徑下,輸入命令:
python -m Web伺服器模塊 [埠號,默認8000]
例如:
python -m SimpleHTTPServer 8080
然後就可以在瀏覽器中輸入
localhost:埠號/路徑
來訪問伺服器資源。

㈩ Python的web開發環境怎麼配置

看錯誤提示是應該是你的myfirst.py文件沒有放在系統路徑包含的地方

可以在apache中的加入myfirst.py所在的路徑


PythonPath "sys.path + ['myfirst.py所在目錄']"

再試試