[Programmering] Det snabbaste Python-webbramverket: wheezy.web

wheezy_web_logo

wheezy.web ingen logotyp; Bilden är gjord av mig i GIMP.

Jag slutade programmera i Python för länge sedan, men det hindrar mig inte från att dela de teknologier jag kan med er ;). För en tid sedan var jag involverad i sökandet efter det "bästa" webbramverket i Python, eftersom det jag använde (Web2Py) var djävulskt långsamt. Min forskning ledde mig till wheezy.web; De som känner honom har säkert gjort det genom spektakulärt riktmärke som författaren gjorde i sin blogg:

python-fastest-web-framework

Jag vet, 25.000 XNUMX förfrågningar per sekund Jämfört med resten av ramarna är det fantastiskt. jag använde mig själv wheezy.web ett tag och jag måste säga att det är ett riktigt konstverk. Var du än tittar på det: snabbhet, enkelhet, säkerhet... Allt. Och utöver det är det en enda persons verk: Andriy Kornatskyy.

  • Fungerar med python 2, python 3 y pypy. Även om 3 ger bättre, är det att föredra att fortsätta använda 2 tills 3 mognar tillräckligt.
  • Hans design är modulära, Så att wheezy.web är fler saker: wheezy.mall, wheezy.html, wheezy.säkerhet… Använd de delar du vill ha.
  • dokumentation enkelt och lätt att förstå.
  • Automatisk HTML-optimering (den komprimerar den så att den upptar mindre utan att behöva använda externa verktyg).
  • Hur kunde det vara annorlunda, det är det fri programvara och öppen källkod ;D.
  • etc ...

I Andriys blogg finns bra tutorials för installera wheezy.web att torka o med i18n (flera språk); förklarar också hur man använder wheezy.web med Nginx. Nackdelen med alla dina tutorials är att antar att du använder Debian, eftersom han inte har testat på andra distros.

Om du använder fedora och du är intresserad wheezy.web, du har tur! Här har du kommandot som kommer att installera de nödvändiga paketen för att kunna följa deras tutorials:

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

Handledningen som Andriy erbjuder att installera wheezy.web med Nginx använder det ett skript som är designat specifikt för Debian, så du måste göra det själv om du använder ett annat system. I mitt fall räcker uWSGI för mig, så jag har aldrig provat det.

Sanningen är att existerande wheezy.web Jag tycker att det är ett brott att använda ett annat ramverk, så om du arbetar med Python, kolla upp det åtminstone! Den enda nackdelen som kan tillskrivas det är att det inte innehåller något abstraktionslager för att underlätta arbetet med databaser (det behöver inte göras, men det finns folk som uppskattar det).

Och det är allt. En kort men relevant artikel. Jag lovar att ta med mer spännande teknik! Vi ses~

Förresten, en kuriosa, vet du varför det kallas "wheezy"? Andriy är ett fan av Debian. Jag lämnar det där ;).


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   Bruno cascio sade

    Prestanda är inte den enda faktorn. Jämfört med Django är det ganska oläsligt. Och ärligt talat, de 25000 15000 förfrågningarna per sekund borde ses i aktion, men jag föredrar att stanna med 25000 XNUMX (django) för att skriva sunt, och delegera resten av arbetet till infrastrukturen, som VERKLIGEN är den som kommer att ta emot eller inte, XNUMX XNUMX förfrågningar.

    Hälsningar! Tack för dejten 🙂

    1.    Bruno cascio sade

      Det säger sig självt att för att göra riktmärket använder jag gamla versioner av andra ramverk...

      1.    lajto sade

        Benchmark-artikeln är från 2012. Han modifierade och utökade den igen 2013 och han specificerar själv att de är från det året: "Senaste tillgängliga versioner när detta skrivs (15 mars 2013)"

    2.    lajto sade

      Oläsligheten som du nämner tycker jag inte är en stor sak. Jag förstår att det ofta eftersträvas enkel programmering, men jag tror inte att det är några större skillnader. Jag använde Web2Py i ett år, och jag försäkrar er att det är ett av de mest användarvänliga ramverken som finns. Naturligtvis är dess prestanda usel på många sätt... I referensartikeln har Massimo Di Pierro själv (skaparen av Web2Py) en debatt med Andriy där han slutligen erkänner att det finns mycket utrymme för förbättringar; När han pratade med Andriy på IRC sa han till mig "det finns en allmänt accepterad filosofi att sätta in allt i ramar och fylla dem med funktioner även om de flesta av dem inte används", och hur rätt han hade...

      Angående det du säger om infrastrukturen så håller jag delvis med om det du säger; 10.000 2 skillnad är MYCKET, speciellt när vi pratar om det mest populära och mogna ramverket jämfört med ett mycket nytt och lite känt. Mitt tillvägagångssätt är alltid att kombinera maximal effektivitet med maximal produktivitet, och jag tror att wheezy.web gör det bäst. Jag har använt Web2Py (mest), Django, Pyramid och wheezy.web och jag försäkrar er att det är oöverträffat. När du väl anpassar dig till hans sätt att göra saker, så blir du inte frikopplad från honom. Den enda fördelen med Django är den stora community som den har och resurserna som finns över hela Internet; det vill säga: lätthet. wheezy.web är ganska nytt i jämförelse, och väldigt få människor känner till det; om du går lätt, bättre WebXNUMXPy eller Django xD.

      Jag vill inte förlänga mig, men när vi pratar om förfrågningar per sekund pratar vi om samtidighet. Om du letar efter samtidighet är Python inte det lämpliga språket. För det finns det andra språk som Erlang eller Haskell (och om du skyndar mig, Rust). Men just av denna anledning är det imponerande att wheezy.web, som upptar så lite kod, som är en persons arbete på sin fritid och en rad andra faktorer, har lyckats uppnå en sådan prestanda.

      Jag förstår vad du säger om "hälsosamt skrivande", men man vet aldrig hur mycket ett projekt kan växa på lång sikt. Att använda mer effektiva och samtidiga verktyg, samt att vara enkel (jag hävdar att wheezy.web är enkel för sin prestanda), sparar pengar och gör att projektet skalas längre utan att byta språk. I slutändan finns allt i pengarna som man måste betala för din server. Det finns väldigt kända webbplatser i PHP, när PHP har dåliga prestanda... Men hur löser de det problemet? Köper bättre servrar. Med det andra tillvägagångssättet löses det genom att programmera bättre och spara resurser :P.

      Jag är ledsen att jag har gått så långt. Jag blir väldigt lätt passionerad xDDD. Hälsningar!

      1.    Bruno cascio sade

        Jag förstod perfekt vad du menar, men just på grund av det du nämner, om ett projekt tenderar att växa eller inte, finns det från början med wheezy inget databaslager.

        Enligt min synvinkel är det bäst att inte gifta sig med något språk. Om du vill ha samtidighet kan du använda Node också, eftersom dess motor körs i C.

        Det du nämner om prestanda är inte bara att skala vertikalt (fallet med PHP), Facebook erbjuder till exempel HHVM, som jag har läst (ej testat) som förbättrar prestandan med 50% och detta är inte att köpa servrar. Vanligt PHP utan cachning av lager och/eller andra sätt att optimera är lika "dåligt" som alla andra språk utan det senare, och jag säger dåligt för att ge dem ett namn, det är inte bara "bättre programmering".

        Skål! 🙂

      2.    lajto sade

        Låt oss se, det som inte finns är ett abstraktionslager. Men du använder motsvarande bibliotek eller modul för att arbeta med din databas och utanför finns det inget mer mysterium. Web2Pys abstraktionslager är till exempel väldigt enkelt, men prestandan sjunker dramatiskt eftersom du inte ens kan skriva optimerad SQL. Allt finns i Python; enkelt, men i utbyte mot prestanda.

        Jag är bekant med HHVM och det är just därför språk som PHP suger för modern tid; om Facebook fanns i Haskell eller Erlang skulle det inte finnas något behov av att skapa HHVM. Använd cache, komprimera filerna som skickas och tas emot osv. är självklara aspekter av varje utveckling. Problemet är att verktyget måste mäta sig :). Och det finns verktyg som inte ger det. Det bästa exemplet på detta är JavaScript... I så fall finns det åtminstone underverk som CoffeeScript, Dart, etc. som kompilerar till JS.

        Hälsningar!

      3.    Bruno cascio sade

        Perfekt! 🙂

        Bara en sak, facebook om du använder haskell, närmare bestämt Haxl 🙂

      4.    upphör sade

        Jo, jag använder web2py mycket, jag håller med om att det inte är det snabbaste ramverket, men det riktmärket verkar lite malplacerat, ännu mer när vi pratar om 3 år sedan så är web2py hello mude-applikationen väldigt laddad jämfört med andra ramverk, men jag har ärligt talat inte upplevt den där enorma skillnaden i prestanda mellan mina applikationer skrivna i web2py och django.

        Förresten, i web2py kan du skriva SQL för att utföra frågorna direkt.

        Hälsningar.

  2.   urKh sade

    Du säger det snabbaste webbramverket, men du visar inga exempel och andra nyckelfaktorer, som utveckling, produktivitet, dokumentation. Eftersom django finns så vet jag inte varför det verkar vara ett brott att inte använda detta :p

    1.    lajto sade

      – Det finns redan exempel i dokumentationen. Också på deras BitBucket-sida: https://bitbucket.org/akorn/wheezy.web/src/tip/demos/
      – När det gäller utveckling och produktivitet så tycker jag personligen att det är ett bra alternativ att sammanfatta det i "enkelhet". Vad är ännu enklare och enklare ramverk? Klar. Men inte med en sådan prestation.
      – Jag har lagt länken till dokumentationen i artikeln xDDD.
      – Varför jag säger att det är ett brott är för att jag anser att en webbsida ska vara så effektiv som möjligt, på alla sätt. Som jag nämnde tidigare så finns det enklare att använda ramverk, men att använda wheezy.web är inte heller C-programmering.Du måste bara försöka hårdare :).

      Hälsningar ^^

  3.   lajto sade

    Förresten, om någon är för lat för att ta reda på det och tror att Wheezy Web bara ökar antalet förfrågningar per sekund... Här är några fler riktmärken:

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

    Jag ber om ursäkt för att jag inte har tagit med dem tidigare. Jag trodde att det räckte med en för att väcka nyfikenhet xD. Hälsningar!

  4.   fenriz sade

    Så långt nöjd med Django.

    1.    oclay sade

      Ehh varje gång jag läser dessa saker gör det mig arg, jag trodde att det bara var med php-ramverken (Symfony,Yii,CondeIgniter,Phalcon………wdf!!). Om Django redan har en (ganska stor) community och är en utmärkt ram, varför istället för att slösa tid på att uppfinna hjulet igen, gå inte med i django.@Lajto-teamet i din konversation med wheezy.web-författaren varför frågar du honom inte om du har aldrig tänkt på att gå med i django-teamet, för helvete. Skål..

      1.    lajto sade

        Det är att även om båda är webbramverk har de väldigt olika tillvägagångssätt. Django är tung, den har mycket kod, medan wheezy.web är lätt och satsar på enkelhet och optimering. Så vitt jag vet är wheezy.web det enda Python-webbramverket som verkligen är modulärt (vilket innebär att den bryter all sin kod i separata delar som alla kan fungera oberoende). Den har många funktioner som skiljer den från resten.

        Varför inte komma in på Django, säger du? För att Django har designats med helt andra tillvägagångssätt. Hur tillämpar du en modulär design på Django? Det skulle behöva göras om praktiskt taget från grunden! Samma sak med många andra frågor.

        Jag förstår att "bättre ett enda ramverk som fungerar bra med en stor gemenskap"-känsla, men det är inte så lätt. Så att du förstår mig, för att skapa en ytlig association, är Django som om det vore Debian och wheezy.web som om det vore... Arch? gentoo? Det är definitivt ett dåligt exempel, men jag tror att du förstår xDDD.

        Hälsningar!

  5.   Ulises sade

    Vad sägs om Lajto, hej, jag gör en app och jag läste wheezy.web-dokumentationen och det är det första webbramverket i python som jag har förstått första gången 🙂 Du förstår, jag har inte så mycket kunskap om nätverk och webb, men jag har en speciell attraktion till programmering.
    Kan du hjälpa mig att ändra hej världen så att den blir en offentlig server? Kanske är det en väldigt dum fråga, förlåt, men jag hittar inte i dokumentationen hur man gör.
    En annan fråga, 😉 i get- och post-metoderna, hur returnerar jag information som inte är en html-sida, returnerar jag information som den är? som en sträng eller en lista eller vilken datatyp som helst. Klienten en app på Android.

    1.    lajto sade

      Hej Ulises! Jag är så glad att du provar wheezy.web :D.

      Om det du säger rekommenderar jag starkt att du inte monterar din egen struktur. Den som Andriy rider är ganska bra, så jag rekommenderar att du följer den. I artikeln finns två länkar till Andriys blogg där han förklarar stegen med i18n och utan i18n. Om du tycker att det är lite förvirrande förklarar jag hur man gör det utan i18n nedan:

      Öppna en terminal och kör dessa fyra kommandon (ersätt "test-web" med vilket mappnamn du vill ha för ditt projekt):

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

      packa upp quickstart-empty.zip

      mv snabbstart-tom test-webb

      rm quickstart-empty.zip

      Om du vill använda PIL, ändra filen setup.py och avkommentera motsvarande kod. När du är redo kör du följande tre kommandon:

      test-webb-cd

      göra env

      env/bin/easy_install uwsgi

      Din server är redan konfigurerad. Om du vill göra en snabb benchmark för att se om det fungerar, medan du är inne i mappen, kör du:

      göra test näs-kåpa benchmark

      Jag rekommenderar att du går till "etc/development.ini" och ändrar "limit-as=120" till "limit-as=512". Detta är hur många MB RAM uWSGI kommer att "äta upp", så i framtiden kan det utökas om det behövs.

      Slutligen, varje gång du vill öppna din server, leta upp dig själv i din projektmapp och kör:

      göra uwsgi

      Angående de andra frågorna... Som standard är servern inställd att köras på localhost. Om du vill göra den offentlig, eftersom du redan har den redo och vill använda den på en fysisk server i produktion, skulle det räcka att öppna "src/app.py" och hitta följande: make_server(", 8080, huvud). Den första parametern är en tom sträng, eller hur? Tja, där lägger du IP:n för din server. Den andra parametern är porten du vill använda, som som standard är 8080.

      Till sist, vad du säger om att returnera något som inte är HTML, det kan du såklart! I dokumentationen förklarar de hur man returnerar allt: https://pythonhosted.org/wheezy.web/userguide.html#web-handlers

      Med vänliga hälsningar! Allt du säger till mig ;).

      1.    Ulises sade

        Tack så mycket Lajto, du klargjorde verkligen mina tvivel, jag hade försökt med django men som jag sa är jag ingen systemingenjör och jag tror att django ger mycket mer än vad jag behövde, använd wheezy.web för att testa en androidapplikation och kommunicera med en server. Något väldigt enkelt men ganska snabbt och praktiskt. Hej, en fråga till, nyligen såg jag ett stort tjafs över http/2, hur vet jag vilket protokoll wheezy.web fungerar på? Kan jag skapa en server som använder http/2 på wheezy.web? Eller rekommendera mig en bok, blogg, handledning som är i äpplen som kan förklara mig om hela frågan om nätverk och kommunikation. Tack igen.

      2.    lajto sade

        Hej igen Ulises ^^.

        HTTP/2 är väldigt nyligen och för ytterligare 1 år kommer det inte att börja antas på allvar, så bry dig inte om det :). Om du vill ha säkerhet, använd HTTPS och det är allt.

        Jag är inte säker på vad Wheezy Web använder för HTTP, så jag antar att det är WSGI.

        En hälsning!

  6.   lajto sade

    Förresten, en liten sak. Vissa distros får ett VARNING-meddelande om .python-eggs. Inget händer om det dyker upp, men om du tycker att det är irriterande kan du ta bort det med:

    chmod go= ~/.python-ägg

    Hälsningar!

  7.   diego sade

    Jag använder Django, men jag ska kolla dokumentationen för att se vad som händer. Tack för att du delar med dig. Hälsningar

  8.   JD Villegas sade

    Det kan användas från Windows!!!, finns det någon handledning??

    tack

  9.   lalita sade

    Hej, vi har mycket erfarenhet av Python. Det verkar för mig att de ror mot strömmen. Det bästa som någonsin uppfunnits för detta språk är Django. Du kan göra statistik och konsultera hundratals programmerare från hela världen, det kommer att ge dig mer än 80%, de flesta av dem har inte fel. Om de ror eller simmar mot strömmen kommer de förr eller senare att drunkna...