[Programació] El framework web en Python més ràpid: wheezy.web

wheezy_web_logo

wheezy.web no té logo; la imatge la vaig fer jo en GIMP.

Des de fa molt de temps vaig deixar de programar en Python, però això no impedeix que comparteixi amb vosaltres les tecnologies que conec;). Temps enrere em enfrasqué en la recerca de l' «millor» framework web en Python, ja que el que usava (web2py) era endimoniadament lent. La meva recerca em va portar fins wheezy.web; els que el coneixen segurament ho hagin fet a través de l' espectacular benchmark que va fer l'autor al seu bloc:

python-fastest-web-framework

Ja ho sé, 25.000 sol·licituds per segon en comparació amb la resta de frameworks és una autèntica passada. Jo mateix vaig usar wheezy.web durant un temps i he de dir que és una autèntica obra d'art. Miris per on ho miris: la rapidesa, la simplicitat, la seguretat ... Tot. I a sobre és la feina d'una única persona: Andriy Kornatskyy.

  • funciona amb 2 Python, 3 Python y PyPy. Encara que el 3 doni millor rendiment, és preferible seguir usant el 2 fins que el 3 maduri prou.
  • El seu disseny és modular, Per la qual cosa wheezy.web són més coses: wheezy.template, wheezy.html, wheezy.security... Fes servir les parts que vulguis.
  • Documentació senzilla i fàcil d'entendre.
  • Optimització automàtica de l'HTML (El comprimeix perquè ocupi menys sense necessitat d'usar eines externes).
  • Com no podia ser d'altra manera, és programari lliure i codi obert ; D.
  • etc ...

Al blog de Andriy hi ha magnífics tutorials per instal·lar wheezy.web a seques o amb i18n (múltiples idiomes); també explica com utilitzar wheezy.web amb Nginx. L'inconvenient de tots els seus tutorials és que assumeix que fas servir Debian, Ja que ell no ha provat en altres distros.

si fas servir Fedora i t'interessa wheezy.web, Estàs de sort! Aquí tens la comanda que instal·larà els paquets necessaris per poder seguir els seus 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

El tutorial que ofereix Andriy per instal·lar wheezy.web amb Nginx fa servir un script pensat específicament per Debian, de manera que haureu de fer-ho pel vostre compte si feu servir un sistema diferent. En el meu cas tinc prou amb uWSGI, de manera que mai ho he intentat.

La veritat és que existint wheezy.web em sembla un crim utilitzar un altre framework, així que si treballes amb Python, ¡fes un cop d'ull com a mínim! L'únic desavantatge que se li pot atribuir és que no porta cap capa d'abstracció per facilitar el treball amb bases de dades (ni falta que fa, però hi ha gent que ho agraeix).

I això ha estat tot. Un article breu, però de rellevància. Prometo portar més tecnologies interessants! Ens veiem ~.

Per cert, una curiositat, sabeu per què es diu «wheezy»? Andriy és fan de Debian. Aquí ho deixo;).


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   Bruno Cascio va dir

    El rendiment no és l'únic factor. Comparat a Django, és bastant il·legible. I sincerament les 25000 peticions per segon caldria veure-les en acció, però prefereixo quedar-me amb 15000 (django) escriure saludablement, i la resta de la feina delegar-ho a la infraestructura, la qual REALMENT és la que et va a rebre o no, 25000 peticions.

    Salutacions! Gràcies per la data 🙂

    1.    Bruno Cascio va dir

      De màs està dir que per fer el benchmark ús versions antigues d'altres frameworks ...

      1.    Lajto va dir

        L'article de l'benchmark és de l'2012. Ho va tornar a modificar i ampliar el 2013 i ell mateix especifica que són d'aquest any: «Latest available versions as of this writing (March 15, 2013)»

    2.    Lajto va dir

      La il·legibilitat que esmentes no crec que sigui per tant. Entenc que moltes vegades es busca facilitat per programar, però no crec que hi hagi diferències realment considerables. Jo vaig usar durant un any web2py, i t'asseguro que és dels frameworks més fàcils d'usar que hi ha disponibles. Això sí, el seu rendiment és pèssim en moltíssims sentits ... En l'article de l'benchmark el propi Massimo Di Pierro (creador d'web2py) té un debat amb Andriy en què finalment admet que hi ha molt per millorar; parlant amb Andriy per IRC, em deia «hi ha una filosofia àmpliament acceptada de posar-li de tot als frameworks i inflar de característiques encara que la majoria no es facin servir», i quanta raó tenia ...

      Sobre el que dius de la infraestructura, comparteixo parcialment el que dius; 10.000 de diferència és MOLT, sobretot quan parlem de l'framework més popular i madur versus un de molt recent i poc conegut. El meu enfocament sempre és el de combinar la màxima eficiència amb la màxima productivitat, i crec que wheezy.web és el que millor ho fa. He fet servir web2py (el que més), Django, Pyramid i wheezy.web i t'asseguro que no té rival. Un cop t'adaptes a la seva forma de fer les coses, no et t'enlaires d'ell. La únics avantatges de Django és l'àmplia comunitat que té i els recursos que hi ha per tot Internet; és a dir: facilitat. wheezy.web és bastant nou en comparació, i el coneix molt poca gent; si es va a la fàcil fàcil, millor web2py o Django xD.

      No em vull estendre, però quan parlem de sol·licituds per segon parlem de concurrència. Si es busca concurrència, Python no és el llenguatge apropiat. Per a això estan altres llenguatges com Erlang o Haskell (i si m'apures, Rust). Però precisament per això és impressionant que wheezy.web ocupant tan poc codi, sent el treball d'una persona en el seu temps lliure i una altra sèrie de factors, hagi aconseguit arribar a semblant rendiment.

      Entenc això que dius de «escriure saludablement», però un mai sap quant pot créixer un projecte a llarg termini. Utilitza eines més eficients i concurrents, a més de simples (mantinc que wheezy.web és simple per al rendiment que té), permeten estalviar diners i fer que el projecte escali durant més temps sense canviar de llenguatge. A la fi tot està en els diners que un té per pagar el seu servidor. Hi ha webs molt famoses en PHP, quan PHP és horrible en rendiment ... Però com solucionen aquest problema? Comprant millors servidors. Amb l'altre enfocament es soluciona programant millor i estalviant recursos: P.

      Sento haver-me estès tant. M'apassiona molt fàcilment xDDD. Salutacions!

      1.    Bruno Cascio va dir

        Vaig entendre perfectament al que vols dir, però justament pel que esmentes, si un projecte tendeix a créixer o no, ja des del anem amb wheezy no hi ha capa de bases de dades.

        Al meu punt de vista, el millor és no casar-se amb cap llenguatge. Si vols concurrència pots utilitzar Node també, que el seu motor corre en C.

        El que mecionas de l'rendiment, no és només escalar verticalment (el cas de PHP), Facebook per exemple brinda HHVM, que he llegit (no provat) que millora en un 50% el rendiment i això no és comprar servidors. PHP a seques sense capes de memòria cau i / o altres formes d'optimitzar és tan «dolent» com qualsevol altre llenguatge sense això últim, i dic dolent com per donar-los un nom, no és només «programar millor».

        Salutacions! 🙂

      2.    Lajto va dir

        A veure, el que no hi ha és capa d'abstracció. Però tu fas servir la llibreria o mòdul corresponent per treballar amb la base de dades i fora, no hi ha més misteri. La capa d'abstracció de web2py és molt senzilla, per exemple, però el rendiment baixa moltíssim a ell ni tan sols poder escriure SQL optimitzat. Tot és en Python; fàcil, però a canvi de rendiment.

        Conec HHVM i precisament per això és pel que llenguatges com PHP són dolentíssims per als temps moderns; si Facebook fos a Haskell o Erlang no hauria calgut crear HHVM. Utilitza la memòria cau, comprimir els arxius que s'envien i reben, etc. són aspectes evidents de qualsevol desenvolupament. El tema està en que l'eina ha de donar la talla :). I hi ha eines que no la donen. El millor exemple d'això és JavaScript ... En aquest cas al menys hi meravelles com coffeescript, Dart, etc. que compilen a JS.

        Salutacions!

      3.    Bruno Cascio va dir

        Perfecte! 🙂

        Només una cosa, Facebook si utilitza haskell, més precisament Haxl 🙂

      4.    Cesar va dir

        Bé, jo faig servir bastant web2py, estic d'acord amb que no és el framework més ràpid, però aquest benchmark em sembla una mica fora de lloc, mes encara quan estem parlant de fa ja uns 3 anys, l'aplicació hola mut de web2py està molt carregada en comparació amb les d'altres frameworks, però jo, sincerament, no he experimentat aquesta diferència abismal en el rendiment entre els meus aplicacions escrites en web2py i django.

        Per cert, en web2py si es pot escriure SQL per a realitzar les consultes directament.

        Salutacions.

  2.   urKh va dir

    El Framework web més rapid dius, però no muentras algun exemple i altres factors claus, com el desenvolupament, productivitat, documentacion. Existint django, no se per que sembla ser un crim no utilitzar aquest: p

    1.    Lajto va dir

      - En la documentació ja hi ha exemples. A la seva pàgina de BitBucket també: https://bitbucket.org/akorn/wheezy.web/src/tip/demos/
      - Sobre el desenvolupament i la productivitat, personalment em sembla que resumir-ho en «simplicitat» és una bona opció. Que hi ha frameworks més simples i fàcils encara? És clar. Però no amb tant rendiment.
      - El link a la documentació ho he posat en l'article xDDD.
      - El per què dic que és un crim és perquè considero que una pàgina web ha de ser el més eficient possible, en tots els sentits. Com he esmentat abans, hi ha frameworks més fàcils d'usar, però usar wheezy.web tampoc és programar en C. Simplement cal esforçar-se més :).

      Salutacions ^^.

  3.   Lajto va dir

    Per cert, per si a algú li fa mandra informar-se i creu que Wheezy web només guanya en sol·licituds per segon ... Aquí teniu uns quants benchmarks més:

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

    Demano disculpes per no haver-los inclòs prèviament. Vaig pensar que amb un era suficient per cridar la curiositat xD. Salutacions!

  4.   Fenriu va dir

    Fins ara feliç amb Django.

    1.    Oclay va dir

      Ehh cada vegada que llegeixo aquestes coses em fa ràbia, pesava que era només amb els frameworks php (Symfony, Yii, CondeIgniter, Phalcon ......... WDF !!). Si ja Django té una comunitat (bastant gran) i és un excel·lent framework per què en comptes de perdre el temps reinventant la roda no s'uneixen a l'equip de django. @ Lajto en el teu conversa amb l'autor de wheezy.web perquè no li preguntes si mai ha pensat unir-se a django team, joder.Saludos ..

      1.    Lajto va dir

        És que encara que tots dos siguin frameworks web tenen enfocaments molt diferents. Django és pesat, té molt codi, mentre que wheezy.web és lleuger aposta per la simplicitat i l'optimització. Que jo sàpiga, wheezy.web és l'únic framework web en Python realment modular (és a dir, que divideix tot el seu codi en diferents parts que poden funcionar de forma independent). Té moltes característiques que el diferencien de la resta.

        Per què no incorporar-se a Django, dius? Perquè Django ha estat dissenyat amb enfocaments completament diferents. Com li apliques un disseny modular a Django? ¡Caldria refer pràcticament des de zero! El mateix amb moltes altres qüestions.

        Entenc aquest sentiment de «millor un únic framework que funcioni bé amb una gran comunitat», però no és tan fàcil. Perquè m'entenguis, per fer una associació superficial, Django és com si fos Debian i wheezy.web com si fos ... Arch? ¿Gentoo? Definitivament és un mal exemple, però crec que s'entén xDDD.

        Salutacions!

  5.   Ulisses va dir

    Que tal Lajto, escolta estic fent una app i lei la documentació de wheezy.web i és el primer framework web en python que li he entès a la primera 🙂 Veras no tinc molt coneixement de xarxes i web, però tinc especial atracció a la programació .
    ¿Podries ajudar-me a com modificar el hola món per fer-ho un servidor públic? potser és una pregunta molt tonta, disculpa, però no trobo en la documentació com fer-ho.
    Una altra pregunta, 😉 en els mètodes get i post, com torno informació que no sigui una pàgina html, ¿retorn informació tal qual? com un string o una llista o qualsevol tipus de dada. El client una app en android.

    1.    Lajto va dir

      Hola Ulisses! M'alegra moltíssim que estiguis provant wheezy.web: D.

      Sobre el que comentes, et recomano àmpliament que no muntanyes teva pròpia estructura. La que munta Andriy és bastant bona, per la qual cosa et recomano que la segueixis. En l'article hi ha dos links a el blog d'Andriy on explica els passos amb i18n i sense i18n. Per si et resulta una mica confús, t'explico com fer-ho sense i18n a continuació:

      Obre una terminal i executa aquests quatre ordres (substitueix «web-de-prova» pel nom de la carpeta que vulguis per al teu projecte):

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

      unzip quickstart-empty.zip

      mv quickstart-empty web-de-prova

      rm quickstart-empty.zip

      Si vols utilitzar PIL, modifica l'arxiu setup.py i descomenta el codi corresponent. Un cop estiguis a punt, executes els següents tres comandos:

      cd web-de-prova

      make env

      env / bin / easy_install uwsgi

      Ja tens el teu servidor muntat. Si vols fer un benchmark ràpid per veure si funciona, estant dins de la carpeta, executes:

      make test nose-cover benchmark

      Et recomano anar a «etc / development.ini» i canviar «limit-as = 120" a "limit-as = 512». Es tracta de quants MB de RAM es «menjarà» uWSGI, de manera que en el futur podria augmentar-se de ser necessari.

      Finalment, cada vegada que vulguis obrir el teu servidor, n'hi hauria prou amb localitzar-te a la carpeta del teu projecte i executar:

      make uwsgi

      Sobre les altres qüestions ... Per defecte, el servidor està programat per funcionar en localhost. Si vols fer-ho públic, perquè ja ho tens llest i vols usar-lo en un servidor físic en producció, n'hi hauria prou amb obrir «src / app.py» i localitzar el següent: make_server ( », 8080, main). El primer paràmetre és una cadena buit, no? Doncs aquí poses la IP del teu servidor. El segon paràmetre és el port que vulguis fer servir, que per defecte està en 8080.

      Finalment, el que comentes de retornar alguna cosa que no sigui un HTML, és clar que es pot! En la documentació t'expliquen com retornar de tot: https://pythonhosted.org/wheezy.web/userguide.html#web-handlers

      Una salutació! Qualsevol cosa em dius;).

      1.    Ulisses va dir

        Moltes gràcies Lajto, deverdad em vas aclarir els dubtes, havia intentat amb django però com et vaig comentar no sóc enginyer en sistemes i django crec que porta molt més del que necessitava, utilitzeu wheezy.web per provar una aplicació en android i comunicar-ho amb un servidor . Una cosa molt senzill però bastant ràpid i pràctic. Escolta una pregunta mes, fa poc vaig veure que s'armo un gran enrenou amb http / 2 com es en què protocol treballa wheezy.web ?, puc fer un servidor que utilitzeu el http / 2 wheezy.web? O recomiendame un llibre, bloc, tutorial que aquest en illes que em pugui explicar sobre tot l'assumpte de xarxes i comunicacions. Denuevo gràcies.

      2.    Lajto va dir

        Hola de nou Ulisses ^^.

        HTTP / 2 és molt recent i fins d'aquí a 1 any no començarà a ser adoptat seriosament, de manera que no et molestis a això :). Si vols seguretat, usa HTTPS i ja està.

        No estic segur de què fa servir Wheezy Web per l'HTTP, així que suposo que serà WSGI.

        Una salutació!

  6.   Lajto va dir

    Per cert, una coseta de res. En algunes distros apareix un missatge de WARNING sobre .python-eggs. No passa res si apareix, però si us resulta molest podeu llevar amb:

    chmod go = ~ / .python-eggs

    Salutacions!

  7.   Diego va dir

    Estic utilitzant Django, però revisaré la documentació per veure que tal. Gràcies per compartir. Salutacions

  8.   JDVillegas va dir

    Es pot usar des windows !!!, hi ha algun tutorial ??

    Gràcias

  9.   Lalita va dir

    Hola tenim molta experiència amb Python. Em sembla que estan remant en contra del corrent. El millor que s'ha inventat per a aquest llenguatge és Django. Poden fer una estadístiques i consultar a centenars de programadors de tot el món, els donarà més d'un 80%, la majoria no s'equivoca. Si remen o neden en contra del corrent, tard o d'hora s'ofegaran ...