[編程]最快的Python Web框架:wheezy.web

wheezy_web_logo

喘息網站 沒有徽標; 我在GIMP中製作了圖像。

很長時間以來,我都停止了使用Python進行編程,但這並不能阻止我與您共享我所知道的技術;)。 前一段時間,我開始尋找Python中“最佳”的Web框架,因為我使用的那個(Web2Py)的運行速度非常慢。 我的研究使我 喘息網站; 那些認識他的人肯定已經通過 作者在其博客上做出的出色基準:

蟒蛇最快的網絡框架

我知道, 每秒25.000個請求 與其他框架相比,這是一個真正的過程。 我自己用過 喘息網站 有一陣子,我不得不說這是一件真正的藝術品。 無論您在哪裡看,都可以:速度,簡單性,安全性……一切。 最重要的是一個人的工作:Andriy Kornatskyy。

  • 適用於 Python的2, Python的3 y y。 即使3可以提供更好的性能,也最好繼續使用2直到3足夠成熟為止。
  • 它的設計是 模塊化,所以 喘息網站 還有更多的東西: 模板, 喘息.html, 喘息的安全…使用所需的零件。
  • 文件 簡單易懂。
  • 自動HTML優化 (對其進行壓縮,以便在不使用外部工具的情況下減少佔用)。
  • 否則怎麼可能 免費軟件和開源 D.
  • 等等...

在Andriy的博客上,有很多很棒的教程 安裝 喘息網站 變乾 o 使用i18n(多種語言); 也解釋 如何使用 喘息網站 與Nginx。 他所有教程的缺點是 假設您使用Debian,因為他尚未在其他發行版上進行測試。

如果您使用 Fedora 你有興趣 喘息網站,您真幸運! 這是將安裝必要的軟件包以遵循其教程的命令:

sudo dnf install python python-devel python3 python3-devel python-setuptools python-virtualenv libxml2 libxml2-devel libxslt libxslt-devel libmemcached libmemcached-devel memcached memcached-devel gzip ntpdate gettext uwsgi uwsgi-plugin-python socat nginx

Andriy提供的安裝指南 喘息網站 使用Nginx時,請使用專門為Debian設計的腳本,因此,如果使用其他系統,則必須自己執行。 就我而言,uWSGI對我來說足夠了,因此我從未嘗試過。

事實是存在 喘息網站 我發現使用其他框架是犯罪,因此,如果您使用Python,則至少要看看它! 唯一可以歸因於它的缺點是,它沒有帶來任何抽象層來促進數據庫的工作(也不需要這樣做,但是有人對此表示讚賞)。

就這樣。 簡短但相關的文章。 我保證會帶來更多有趣的技術! 再見〜

順便說一句,出於好奇,您知道為什麼它被稱為“喘息”嗎? Andriy是Debian的粉絲。 我把它留在那裡;)。


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   布魯諾·卡西歐(Bruno Cascio) 他說:

    性能不是唯一的因素。 與Django相比,它非常不可讀。 老實說,應該每秒看到25000個請求,但是我更喜歡保持15000(django)的健康狀態,其餘工作委託給基礎架構,這實際上是將要接收或請求的基礎架構。不,25000個請求。

    問候! 謝謝你的數據🙂

    1.    布魯諾·卡西歐(Bruno Cascio) 他說:

      不用說,要進行基準測試,我會使用其他框架的舊版本...

      1.    拉伊托 他說:

        該基准文章來自2012年。他在2013年再次對其進行了修改和擴展,他本人指定這些年份是該年份的內容:《撰寫本文時的最新可用版本(15年2013月XNUMX日)»

    2.    拉伊托 他說:

      您認為我認為的難以辨認是那麼糟糕。 我知道經常會尋求簡化編程的方法,但是我認為並沒有真正的區別。 我使用Web2Py已有一年,並且向您保證,它是最容易使用的框架之一。 當然,它的性能在許多方面都很糟糕。在基準測試文章Massimo Di Pierro本人(Web2Py的創建者)與Andriy進行了一場辯論,他最終承認還有很多地方需要改進。 在IRC上與Andriy交談時,他告訴我“有一種被廣泛接受的哲學,即將所有內容放入框架中,並使用功能使它們膨脹,即使大多數功能未被使用,也是如此。”

      關於您對基礎架構的看法,我會部分分享您的看法; 10.000的差額很多,尤其是當我們談論最流行,最成熟的框架與最近的鮮為人知的框架時。 我的方法始終是將最高效率與最高生產率結合起來,我認為wheezy.web做到最好。 我使用過Web2Py(最多),Django,Pyramid和wheezy.web,並且向您保證它是無與倫比的。 一旦適應了他的處事方式,就不會脫離他。 Django的唯一優點是它擁有龐大的社區和遍布Internet的資源。 也就是說:輕鬆。 wheezy.web在比較中是一個相當新的事物,很少有人知道。 如果輕鬆的話,最好使用Web2Py或Django xD。

      我不想擴展自己,但是當我們談論每秒的請求時,我們談論的是並發。 如果需要並發,則Python不是合適的語言。 那就是Erlang或Haskell等其他語言的用途(如果您要趕緊我的話,Rust)。 但是正是由於這個原因,令人印象深刻的是,僅佔用很少代碼的wheezy.web就是人們在空閒時間工作和其他一系列因素所取得的成就。

      我理解您所說的“健康寫作”,但您永遠不知道一個項目可以長期增長。 使用更高效,更有效的並發工具,以及使用簡單的工具(我認為wheezy.web就其性能而言很簡單),可以節省資金,並且可以在不更改語言的情況下延長項目規模。 最後,一切都在您必須為服務器支付的錢中。 在PHP中,有許多非常著名的網站,但當PHP的性能令人震驚時...但是您如何解決該問題? 購買更好的服務器。 使用另一種方​​法,可以通過更好地編程並節省資源來解決:P.

      很抱歉擴展了我自己。 我對xDDD充滿熱情。 問候!

      1.    布魯諾·卡西歐(Bruno Cascio) 他說:

        我完全理解您的意思,但是正是由於您提到的內容,如果一個項目趨向於增長與否,因為我們一直在忙,所以沒有數據庫層。

        以我的觀點,最好不要嫁給任何語言。 如果需要並發,則也可以使用Node,它的引擎在C中運行。

        您提到的性能不僅僅是垂直擴展(例如PHP),例如Facebook提供了HHVM,我已經閱讀(未測試)可將性能提高50%,而且這並不是購買服務器。 沒有緩存層和/或其他優化方法的純PHP與沒有其他語言的任何其他語言一樣“糟糕”,我的意思是給他們起一個名字很不好,而不僅僅是“更好的代碼”。

        乾杯! 🙂

      2.    拉伊托 他說:

        讓我們看看,沒有抽象層。 但是,您可以使用相應的庫或模塊來處理數據庫以及外部數據庫,這不再是個謎。 例如,Web2Py抽象層非常簡單,但是由於您甚至無法編寫優化的SQL,因此性能急劇下降。 一切都在Python中。 容易,但回報表現。

        我知道HHVM,這就是為什麼像PHP這樣的語言在現代很糟糕的原因; 如果Facebook位於Haskell或Erlang中,則無需創建HHVM。 使用緩存,壓縮發送和接收的文件,等等。 它們是任何發展的明顯方面。 問題是該工具必須測量:)。 還有一些工具無法提供它。 最好的例子是JavaScript ...在那種情況下,至少有奇蹟,例如CoffeeScript,Dart等。 編譯為JS。

        您好!

      3.    布魯諾·卡西歐(Bruno Cascio) 他說:

        完善! 🙂

        僅僅是一件事,facebook,如果您使用haskell,更確切地說是Haxl🙂

      4.    停止 他說:

        好吧,我經常使用web2py,我同意這不是最快的框架,但是該基準測試似乎有點不合時宜,更何況在我們談論3年前時,與之相比,web2py的h啞應用程序已加載得非常多到其他框架,但老實說,我還沒有體驗過用web2py和django編寫的應用程序之間的性能差異。

        順便說一句,在web2py中,是否可以編寫SQL直接執行查詢。

        問候。

  2.   尿激酶 他說:

    您說的最快的Web框架,但沒有顯示一些示例和其他關鍵因素,例如開發,生產力,文檔。 現有的django,我不知道為什麼不使用它似乎是一種犯罪:p

    1.    拉伊托 他說:

      -文檔中已經有示例。 在他的BitBucket頁面上: https://bitbucket.org/akorn/wheezy.web/src/tip/demos/
      -關於發展和生產力,我個人認為以“簡單”進行總結是一個不錯的選擇。 什麼是更簡單易用的框架? 當然。 但是性能不高。
      -我將鏈接指向xDDD中的文檔。
      -之所以說這是犯罪,是因為我認為網頁應以各種方式盡可能高效。 如前所述,有些框架更易於使用,但是使用wheezy.web也不是C編程,您只需要更加努力即可:)。

      問候^^。

  3.   拉伊托 他說:

    順便說一句,如果有人懶惰地發現並認為Wheezy Web僅在每秒請求數中獲勝,那麼……這裡還有一些基準測試:

    http://paste.desdelinux.net/5128 (el filtro de spam de DesdeLinux no me deja poner tantos links)

    抱歉,以前沒有包含這些內容。 我以為足以吸引好奇心xD。 問候!

  4.   芬里茲 他說:

    到目前為止,對Django感到滿意。

    1.    粘土 他說:

      嗯,每當我閱讀這些內容時,都會使我感到生氣,我以為這只是使用php框架(Symfony,Yii,CondeIgniter,Phalcon…………wdf!)。 如果Django已經有一個社區(很大)並且是一個很好的框架,那麼為什麼不浪費時間重新發明輪子,卻不加入django團隊呢@ Lajto與wheezy.web的作者交談時,為什麼不問他你從來沒想過要加入Django團隊,該死。

      1.    拉伊托 他說:

        儘管兩者都是Web框架,但是它們具有截然不同的方法。 Django很重,它有很多代碼,而wheezy.web很輕,它致力於簡化和優化。 據我所知,wheezy.web是唯一真正的模塊化Python Web框架(也就是說,它將所有代碼拆分為可以獨立工作的不同部分)。 它具有許多與眾不同的特徵。

        您為什麼不加入Django? 因為Django的設計方法完全不同。 您如何將模塊化設計應用於Django? 它實際上必須從頭開始重新製作! 與許多其他問題相同。

        我得到了“更好的單一框架,可以在大型社區中很好地工作”的感覺,但這並不是那麼容易。 因此,您了解了,通過建立表面的聯繫,Django就像是Debian和wheezy.web一樣……拱門? Gentoo? 這絕對是一個不好的例子,但是我認為xDDD是可以理解的。

        您好!

  5.   “尤利西斯” 他說:

    Lajto怎麼樣,嘿,我正在開發一個應用程序,閱讀了wheezy.web文檔,這是我第一次了解的第一個python Web框架🙂您知道,我對網絡和Web的了解不多,但是我對編程特別有吸引力。
    您能幫我如何修改Hello World使其成為公共服務器嗎? 抱歉,這可能是一個非常愚蠢的問題,但我在文檔中找不到如何執行此操作。
    另一個問題,在get和post方法中,當我返回非html頁面的信息時,是否按原樣返回信息? 作為字符串或列表或任何類型的數據。 客戶端是android中的應用。

    1.    拉伊托 他說:

      你好烏利塞斯! 我很高興您正在測試wheezy.web:D。

      關於您的評論,我強烈建議您不要安裝自己的結構。 安德里(Andriy)的騎行非常好,所以我建議您遵循它。 在本文中,有兩個指向Andriy博客的鏈接,其中他解釋了使用i18n和不使用i18n的步驟。 萬一有點混亂,我將在下面解釋在沒有i18n的情況下如何做:

      打開一個終端並運行以下四個命令(將“ test-web”替換為您要用於項目的文件夾的名稱):

      wget的 https://bitbucket.org/akorn/wheezy.web/downloads/quickstart-empty.zip

      解壓縮quickstart-empty.zip

      mv quickstart-empty測試網站

      rm 快速啟動-空.zip

      如果要使用PIL,請修改setup.py文件並取消註釋相應的代碼。 準備就緒後,運行以下三個命令:

      網絡測試光盤

      使環境

      env / bin / easy_install uwsgi

      您的服務器已安裝。 如果要在文件夾內進行快速基準測試以查看其是否有效,請運行:

      制定測試標準

      我建議您轉到“ etc / development.ini”並將“ limit-as = 120”更改為“ limit-as = 512”。 這就是uWSGI將“消耗”多少MB的RAM,因此將來有需要時可以增加它。

      最後,每次您要打開服務器時,就足以將您自己定位在項目文件夾中並執行:

      做uwsgi

      關於其他問題……默認情況下,服務器被編程為在localhost上運行。 如果要使其公開,因為您已經準備好要在生產中的物理服務器上使用它,只需打開“ src / app.py”並找到以下內容:make_server(“ 8080,主要”)。 第一個參數是一個空字符串,對嗎? 好了,您將服務器的IP放在了那裡。 第二個參數是您要使用的端口,默認情況下為8080。

      最後,您當然可以說返回HTML以外的內容! 他們在文檔中解釋瞭如何返回所有內容: https://pythonhosted.org/wheezy.web/userguide.html#web-handlers

      問候! 您告訴我的任何內容;)。

      1.    “尤利西斯” 他說:

        非常感謝Lajto,您確實澄清了我的疑問,我曾經嘗試過使用django,但是正如我告訴您的那樣,我不是系統工程師和django,我認為它帶來的好處遠遠超出了我的需求,請使用wheezy.web在android並與服務器通信。 很簡單,但是又很實用的東西。 嘿,還有一個問題,最近我發現http / 2引起了很大的爭議,我怎麼知道wheezy.web使用的協議呢?我可以在wheezy.web中製造使用http / 2的服務器嗎? 或向我推荐一本書,博客和教程,它們以塊的形式可以解釋網絡和通信的全部問題。 再次感謝。

      2.    拉伊托 他說:

        再次問好,Uluises ^^。

        HTTP / 2是非常新的,並且在接下來的1年內不會被認真採用,因此,請不要理會:)。 如果您需要安全性,請使用HTTPS就是這樣。

        我不確定Wheezy Web用於HTTP的什麼,所以我假設它將是WSGI。

        您好!

  6.   拉伊托 他說:

    順便說一句,什麼都沒有。 在某些發行版中,將顯示有關.python-eggs的警告消息。 如果出現,則什麼也不會發生,但是如果您感到困擾,可以使用以下方法將其刪除:

    chmod go =〜/ .python-雞蛋

    您好!

  7.   迭戈 他說:

    我正在使用Django,但我將查看文檔以了解其工作方式。 感謝分享。 問候

  8.   傑維耶加斯 他說:

    可以在Windows !!!中使用它,這裡有教程嗎?

    謝謝

  9.   拉麗塔 他說:

    嗨,我們對Python有很多經驗。 在我看來,他們正在逆流而上。 該語言發明的最好的東西是Django。 他們可以進行統計並諮詢來自世界各地的數百名程序員,這將為您提供80%以上的服務,大多數都沒有錯。 如果他們逆流而行或游泳,遲早他們會淹死...