2009-02-24 24 views
12

早上好。Python網頁編程

正如標題所示,我有一些關於使用python進行web開發的問題。

  • 什麼是開發環境的最佳設置,更具體地說,是什麼web服務器使用,如何綁定python。最好是,我希望它可以在* nix和win環境中實現。

當我最後一次嘗試apache + mod_python + CherryPy時,我主要關心的是不得不重新加載web服務器才能看到更改。它被認爲是正常的嗎?出於某種原因,cherrypy的自動重新加載根本不起作用。

  • 將正在運行的Python應用程序部署到生產中的最佳設置是什麼?爲什麼?我現在使用lighttpd來處理我的PHP網絡應用程序,但是與Python相比,Python會如何做呢?

  • 是否值得直接用框架跳水或滾動我自己的簡單東西?我看到Django擁有不少粉絲,但我認爲這對我的需求來說太過於誇張,所以我開始關注CherryPy。

  • 如果我必須重新加載httpd才能看到更改,Python應用程序到底有多精確?就像永久進程產生子進程一樣,所有主要文件都包含在服務器啓動時發生,然後只需要延遲加載所需的資源?

  • Python支持多線程,在開發Web應用程序時,我是否需要考慮使用它來獲得好處?那會有什麼好處,在什麼情況下呢?

非常感謝!

回答

6

因此,這裏有我的想法吧:

我使用Python Paste開發我的應用程序,並最終還運行它(或任何其他的Python的Web服務器)。我通常不使用mod_python或mod_wsgi,因爲它使開發設置更加複雜。

我正在使用zc.buildout來管理我的開發環境和所有依賴項以及virtualenv。這給了我一個獨立的沙箱,它不會干擾系統安裝的任何Python模塊。

對於部署,我還使用buildout/virtualenv,最終使用不同的buildout.cfg。我也使用Paste Deploy和它的配置機制,我有不同的配置文件進行開發和部署。

由於我通常運行粘貼/ cherrypy等standalone我使用Apache,NGINX或者可能只是一個孤獨的光油在它前面。這取決於你需要什麼配置選項。例如。如果不需要虛擬主機,重寫規則等,那麼我不需要在前面提供全功能的Web服務器。當使用Web服務器時,我通常使用ProxyPass或使用mod_rewrite進行一些更復雜的重寫。

我現在使用的Python web框架現在是repoze.bfg btw。

至於你關於重新加載的問題,我知道這些問題, mod_python,但是當使用獨立的「貼紙服務... - 重載」等。它到目前爲止效果非常好。 repoze.bfg另外還有一些設置用於在模板更改時自動重新加載模板。如果你使用的框架應該被記錄下來。

至於通常在python web服務器中使用的多線程。由於CherryPy支持這個,我猜你不必擔心這個問題,應該自動使用它。您應該最終制定一些基準,以確定您的應用程序在哪些線程中表現最佳。

希望有所幫助。

+0

謝謝,這是非常有幫助 – Karolis 2009-02-24 10:55:19

+0

很高興我可以幫助,但當然,我也仍然在學習/嘗試用最好的方式來做到這一點。我應該補充一點,repoze.bfg也建立在WSGI之上。還有很多有用的中間件,比如Paste#evalerror,repoze.errorlog,repoze.profiler等。 – MrTopf 2009-02-24 11:21:36

6

+1給MrTopf的回答,但我會補充一些意見。

Web服務器

Apache是​​會給你最可配置的網絡服務器。避免mod_python,因爲它基本上不受支持。另一方面,mod_wsgi得到了很好的支持,併爲您提供更好的穩定性(換句話說,更容易配置cpu /內存使用情況,使其穩定而不是spikey和不可預測的)。

另一個巨大的好處,你可以配置的mod_wsgi如果WSGI應用程序腳本被觸摸刷新你的應用程序,無需重新啓動Apache。對於開發/測試服務器,甚至可以配置mod_wsgi以在應用程序中的任何文件發生更改時重新加載。這非常有幫助,我甚至在開發過程中在筆記本電腦上運行Apache + mod_wsgi。

Nginx和lighttpd通常用於web服務器,通過直接通過fastCGI接口提供Python應用程序(不用擔心這些服務器上的任何WSGI接口)或將它們用作Apache前端。調用應用程序通過(通過代理)傳遞給Apache + mod_wsgi,然後nginx/lighttpd直接提供靜態內容。

Nginx已經是能夠直接從memcached的服務內容,如果你想要得到的是複雜的附加優勢。我聽說過關於lighttpd的詆譭性評論,它似乎有一些發展問題,但肯定有一些大公司成功地使用它。

Python的堆棧

在最低級別,你可以程序直接WSGI以獲得最佳性能。有很多有用的WSGI模塊可以幫助你在你不想發展的領域。在這個級別上,您可能會選擇第三方WSGI組件來執行URL解析和HTTP請求/響應處理等操作。一個很好的請求/響應組件是WebOb

如果你看看Pylons,你可以看到他們的想法是「最好的」WSGI組件和一個框架,它比Django更容易選擇你自己的組件,比如模板引擎。

Django可能會矯枉過正,但我​​認爲這不是一個很好的反對意見。 Django使簡單的東西變得更容易。當你開始進入非常複雜的應用程序時,你真的需要考慮轉向更低級別的框架。

+0

我將不得不深入研究WSGI,謝謝 – Karolis 2009-02-24 10:56:14

8

什麼是一個開發環境,選擇最佳的設置?

沒關係。我們使用Django,它很好地運行在Windows和Unix上。爲了生產,我們在Red Hat中使用Apache。

是具有重載網絡服務器看到認爲是正常的變化?

是的。不清楚你爲什麼想要任何不同的東西。 Web應用程序軟件不應該是動態的。內容是。軟件編號

在Django中,我們開發沒有在我們的桌面上使用任何類型的Web服務器。在大多數情況下,Django「runserver」命令重新加載應用程序。對於開發來說,這很有用。無法重新加載的時間是當我們嚴重損壞了應用程序時,應用程序無法正常運行。

什麼是部署工作Python應用程序生產和爲什麼最好的設置?

「最好」是在這方面不確定的。因此,請提供一些「嵌套」的資格(例如,「最快」,「最便宜」,「最藍」)。

是否值得直接使用框架跳轉或滾動某些簡單的東西?

不要浪費時間自己滾動。我們使用Django是因爲內置的管理頁面,我們不必編寫或維護。節省工作的高峯。

到底是如何Python應用程序提供服務,如果我需要重新加載的httpd看到的變化?

兩種方法:

  • 守護 - mod_wsgi的或具有的mod_fastcgi它們所連接一個Python守護進程。改變你的軟件。重新啓動守護進程。

  • 嵌入式 - mod_wsgi的或mod_python的具有嵌入式模式,其中Python解釋是國防部內部,內部的Apache。您必須重新啓動httpd才能重新啓動該嵌入式解釋器。

我是否需要考慮使用多線程?

是和否。是的,你需要知道這一點。不,你不需要做太多。 Apache和mod_wsgi和Django應該爲你處理這個問題。

+1

非常明確和有幫助。關於不得不重新加載服務器..我想我多年來用PHP開發了一個錯誤的思維模式,你知道,類型 - 檢查瀏覽器,重複。不確定在不經常檢查瀏覽器結果的情況下進行開發有多簡單,有什麼建議? – Karolis 2009-02-24 11:21:39

1

當螺紋Apache服務器(Windows的默認值)上使用mod_python,CherryPy的運行在同一進程中的Apache。在這種情況下,您幾乎可以肯定不需要要CP重新啓動進程。

解決方案:使用mod_rewritemod_proxy以便CherryPy運行在其自己的進程中。然後,您可以自動重新加載您的內容。 :)

2

看看Google App Engine。從他們的網站:

谷歌應用程序引擎可以讓你在谷歌的基礎設施 運行 Web應用程序。App引擎 應用程序易於構建,易於 維護,並且易於擴展,因爲您的流量和數據存儲需求會增長。 使用App Engine,沒有服務器 需要維護:您只需上傳您的 應用程序,並準備爲您的用戶服務 。

您可以使用免費的 域名的appspot.com域, 滿足您的應用或使用谷歌企業應用套件從 自己的域名爲它服務。您可以與全球分享您的 應用程序,或限制 訪問您的 組織的成員。

App Engine成本沒有得到 開始。註冊一個免費帳戶, ,你可以開發和發佈你的 申請全球免費看到,在 免費和沒有義務。 A 免費帳戶可以使用高達500MB的 永久存儲和足夠的CPU和 帶寬約500萬個月查看 。

最重要的部分:它包括Python支持,包括Django。去http://code.google.com/appengine/docs/whatisgoogleappengine.html