[Programming] Ang pinakamabilis na balangkas ng web ng Python: wheezy.web

wheezy_web_logo

wheezy.web walang logo; Ginawa ko ang imahe sa GIMP.

Sa loob ng mahabang panahon ay tumigil ako sa pagprograma sa Python, ngunit hindi ako pipigilan sa pagbabahagi ng mga teknolohiya na alam ko sa iyo;). Ilang oras ang nakalipas napunta ako sa paghahanap para sa "pinakamahusay" na balangkas ng web sa Python, dahil ang ginamit ko (Web2Py) ay mabagal. Inakay ako ng aking pagsasaliksik wheezy.web; ang mga nakakakilala sa kanya ay tiyak na nagawa ito sa pamamagitan ng kamangha-manghang benchmark na ginawa ng may-akda sa kanyang blog:

python-pinakamabilis-web-framework

Alam ko, 25.000 mga kahilingan bawat segundo kumpara sa natitirang mga balangkas ito ay isang tunay na pass. Ginamit ko ang aking sarili wheezy.web sandali at sasabihin kong ito ay isang tunay na gawain ng sining. Kung saan mo man ito titingnan: bilis, simple, seguridad ... Lahat. At sa itaas ito ay ang gawain ng isang solong tao: Andriy Kornatskyy.

  • Gumagana sa Python 2, Python 3 y pypy. Bagaman ang 3 ay nagbibigay ng mas mahusay na pagganap, mas mabuti na ipagpatuloy ang paggamit ng 2 hanggang sa 3 ay sapat na sa pag-mature.
  • Ang disenyo nito ay modular, kaya wheezy.web ay mas maraming mga bagay: wheezy.template, wheezy.html, wheezy.seguridad… Gamitin ang mga bahagi na nais mo.
  • dokumentasyon simple at madaling maunawaan.
  • Awtomatikong pag-optimize ng HTML (pinipiga ito upang mas kaunti ang tatagal nang hindi gumagamit ng mga panlabas na tool).
  • Paano ito magiging kung hindi man, ito ay libreng software at open source ; D.
  • etc ...

Sa blog ni Andriy mayroong mahusay na mga tutorial para sa i-install wheezy.web patuyuin o kasama ang i18n (maraming wika); nagpapaliwanag din Paano gamitin wheezy.web kasama si Nginx. Ang downside sa lahat ng kanyang mga tutorial ay iyon ipagpalagay na gumagamit ka ng Debian, dahil hindi pa siya nasubok sa iba pang mga distrito.

Kung gumagamit ka Fedora at interesado ka wheezy.web, ikaw ay mapalad! Narito ang utos na mag-i-install ng mga kinakailangang mga pakete upang masundan ang mga tutorial nito:

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

Ang tutorial na inaalok ni Andriy na mai-install wheezy.web gamit ang Nginx gumagamit ito ng isang script na partikular na idinisenyo para sa Debian, kaya kakailanganin mong gawin ito sa iyong sarili kung gumamit ka ng ibang system. Sa aking kaso, ang uWSGI ay sapat na para sa akin, kaya hindi ko ito nasubukan.

Ang totoo ay mayroon na wheezy.web Nahanap ko na isang krimen na gumamit ng isa pang balangkas, kaya kung nagtatrabaho ka sa Python, tingnan ito kahit papaano! Ang kawalan lamang na maaaring maiugnay dito ay hindi ito nagdadala ng anumang layer ng abstraction upang mapadali ang trabaho sa mga database (hindi rin kailangan, ngunit may mga taong pinahahalagahan ito).

At yun lang. Isang maikling, ngunit may-katuturang artikulo. Nangangako akong magdadala ng mas maraming mga kagiliw-giliw na teknolohiya! See you ~.

Sa pamamagitan ng paraan, isang pag-usisa, alam mo ba kung bakit ito tinawag na "wheezy"? Si Andriy ay tagahanga ni Debian. Iniwan ko ito doon;).


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   Bruno cascio dijo

    Ang pagganap ay hindi lamang ang kadahilanan. Kung ikukumpara sa Django, medyo hindi ito nababasa. At sa totoo lang, ang mga kahilingan ng 25000 bawat segundo ay dapat makita sa aksyon, ngunit mas gusto kong manatili sa 15000 (django) na sumulat nang malusog, at ang natitirang delegado ng trabaho sa imprastraktura, na talagang ang tatanggap o hindi , 25000 mga kahilingan.

    Cheers! Salamat sa data 🙂

    1.    Bruno cascio dijo

      Hindi na sinasabi na upang benchmark Gumagamit ako ng mga lumang bersyon ng iba pang mga balangkas ...

      1.    lajto dijo

        Ang artikulo ng benchmark ay mula noong 2012. Binago at pinalawak niya ulit ito noong 2013 at siya mismo ang tinukoy na ang mga ito ay mula sa taong iyon: «Pinakabagong magagamit na mga bersyon sa pagsulat na ito (Marso 15, 2013)»

    2.    lajto dijo

      Ang pagiging hindi binabanggit na nabanggit na sa palagay ko ay hindi masama. Naiintindihan ko na ang kadalian ng pagprograma ay madalas na hinahangad, ngunit sa palagay ko ay walang talagang pagkakaiba. Gumamit ako ng Web2Py sa loob ng isang taon, at sinisiguro ko sa iyo na ito ay isa sa pinakamadaling gamitin na magagamit na mga balangkas. Siyempre, ang pagganap nito ay kahila-hilakbot sa maraming paraan ... Sa benchmark na artikulo na si Massimo Di Pierro mismo (tagalikha ng Web2Py) ay may debate kay Andriy kung saan sa wakas ay aminado siyang maraming dapat pagbutihin; nakikipag-usap kay Andriy sa IRC, sinabi niya sa akin na "mayroong isang malawak na tinatanggap na pilosopiya ng paglalagay ng lahat sa mga balangkas at pamumula ng mga ito sa mga tampok kahit na ang karamihan ay hindi ginagamit", at kung gaano siya tama ...

      Tungkol sa sinasabi mo tungkol sa imprastraktura, bahagyang ibinabahagi ko ang iyong sinabi; Ang pagkakaiba sa 10.000 ay MADAMI, lalo na kapag pinag-uusapan natin ang tungkol sa pinakatanyag at mature na balangkas kumpara sa napakahusay at hindi gaanong kilala. Ang aking diskarte ay palaging upang pagsamahin ang maximum na kahusayan sa maximum na pagiging produktibo, at sa palagay ko ang wheezy.web ay pinakamahusay na ginagawa iyon. Gumamit ako ng Web2Py (ang pinaka), Django, Pyramid at wheezy.web at sinisiguro ko sa iyo na ito ay walang katumbas. Sa sandaling umangkop ka sa kanyang paraan ng paggawa ng mga bagay, hindi mo na hihiwalay sa kanya. Ang mga bentahe lamang ng Django ay ang malaking pamayanang mayroon ito at ang mga mapagkukunan na nasa buong Internet; iyon ay upang sabihin: kadalian. Ang wheezy.web ay medyo bago sa paghahambing, at kakaunti ang mga taong nakakaalam tungkol dito; kung madali kang pumunta, mas mahusay ang Web2Py o Django xD.

      Hindi ko nais na mapalawak, ngunit kapag pinag-uusapan natin ang tungkol sa mga kahilingan bawat segundo pinag-uusapan natin ang tungkol sa pagsabay. Kung hinahangad ang pagsabay, ang Python ay hindi ang naaangkop na wika. Iyon ang para sa ibang mga wika tulad ng Erlang o Haskell para sa (at kung pinagmamadali mo ako, Rust). Ngunit tiyak para sa kadahilanang ito ay kahanga-hanga na ang wheezy.web, na sumasakop sa napakakaunting code, na gawa ng isang tao sa kanilang libreng oras at isang serye ng iba pang mga kadahilanan, ay nakamit upang makamit ang naturang pagganap.

      Naiintindihan ko kung ano ang sasabihin mo tungkol sa "malusog na pagsulat", ngunit hindi mo malalaman kung magkano ang isang proyekto ay maaaring lumago sa pangmatagalan. Ang paggamit ng mas mahusay at kasabay na mga tool, pati na rin ang simple (pinapanatili ko na ang wheezy.web ay simple para sa pagganap na mayroon ito), makatipid ng pera at gawing mas mahaba ang sukat ng proyekto nang hindi binabago ang wika. Sa huli ang lahat ay nasa pera na babayaran mo para sa iyong server. Mayroong mga tanyag na website sa PHP, kung ang PHP ay kakila-kilabot sa pagganap ... Ngunit paano mo malulutas ang problemang iyon? Ang pagbili ng mas mahusay na mga server. Sa iba pang diskarte, malulutas ito ng mas mahusay na pag-program at pag-save ng mga mapagkukunan: P.

      Humihingi ako ng paumanhin na napalawak ko ang aking sarili nang labis. Napakadali kong madamdamin tungkol sa xDDD. Cheers!

      1.    Bruno cascio dijo

        Ako ay lubos na naintindihan kung ano ang ibig mong sabihin, ngunit tiyak dahil sa iyong binabanggit, kung ang isang proyekto ay may gawi na lumago o hindi, dahil sa pumunta kami sa wheezy walang database layer.

        Sa aking pananaw, pinakamahusay na huwag magpakasal sa anumang wika. Kung nais mo ng concurrency maaari mo ring gamitin ang Node, ang engine nito ay tumatakbo sa C.

        Ang binanggit mo tungkol sa pagganap, ay hindi lamang pag-scale nang patayo (ang kaso ng PHP), halimbawa ang Facebook ay nag-aalok ng HHVM, na nabasa ko (hindi nasubukan) na nagpapabuti sa pagganap ng 50% at hindi ito bibili ng mga server. Sa madaling salita, ang PHP na walang mga layer ng cache at / o iba pang mga paraan ng pag-optimize ay "masamang" tulad ng anumang iba pang wika nang wala ang huli, at ang ibig kong sabihin ay masamang bigyan sila ng isang pangalan, hindi lamang ito "mas mahusay na pag-program".

        Cheers! 🙂

      2.    lajto dijo

        Tingnan natin, kung ano ang wala ay isang layer ng abstraction. Ngunit ginagamit mo ang kaukulang library o module upang gumana sa iyong database at sa labas, wala nang misteryo. Ang layer ng Web2Py abstraction ay napaka-simple, halimbawa, ngunit ang pagganap ay bumagsak nang dramatiko dahil hindi mo man masulat ang na-optimize na SQL. Ang lahat ay nasa sawa; madali, ngunit kapalit ng pagganap.

        Alam ko ang HHVM at iyon ang tiyak kung bakit ang mga wika tulad ng PHP ay kakila-kilabot para sa mga modernong panahon; kung ang Facebook ay nasa Haskell o Erlang hindi na kinakailangan upang lumikha ng HHVM. Gumamit ng cache, i-compress ang mga file na ipinadala at natanggap, atbp. ang mga ito ay halatang aspeto ng anumang pag-unlad. Ang isyu ay dapat sukatin ang tool :). At may mga tool na hindi ibinibigay. Ang pinakamahusay na halimbawa nito ay ang JavaScript ... Sa kasong iyon hindi bababa sa may mga kababalaghan tulad ng CoffeeScript, Dart, atbp. na sumulat sa JS.

        Pagbati!

      3.    Bruno cascio dijo

        Perpekto! 🙂

        Isang bagay lang, facebook kung gumagamit ka ng haskell, mas tiyak na Haxl 🙂

      4.    Maghinto dijo

        Sa gayon, gumagamit ako ng web2py ng marami, sang-ayon ako na hindi ito ang pinakamabilis na balangkas, ngunit ang benchmark na iyon ay tila medyo wala sa lugar, lalo na kapag pinag-uusapan natin ang tungkol sa 3 taon na ang nakakaraan, ang hello pipi na aplikasyon ng web2py ay napaka-load kumpara sa sa iba pang mga balangkas, ngunit sa totoo lang hindi ko naranasan ang labis na pagkakaiba sa pagganap sa pagitan ng aking mga application na nakasulat sa web2py at django.

        Sa pamamagitan ng paraan, sa web2py kung maaari mong isulat ang SQL upang maisagawa nang direkta ang mga query.

        Pagbati.

  2.   urKh dijo

    Ang pinakamabilis na balangkas ng web na sinasabi mo, ngunit hindi ka nagpapakita ng anumang halimbawa at iba pang pangunahing mga kadahilanan, tulad ng pag-unlad, pagiging produktibo, dokumentasyon. Sa pagkakaroon ng django, hindi ko alam kung bakit tila isang krimen na hindi ito gamitin: p

    1.    lajto dijo

      - Mayroon nang mga halimbawa sa dokumentasyon. Sa kanyang pahina ng BitBucket din: https://bitbucket.org/akorn/wheezy.web/src/tip/demos/
      - Sa pag-unlad at pagiging produktibo, personal kong iniisip na ang pagbubuod nito sa "pagiging simple" ay isang mahusay na pagpipilian. Ano ang mas simple at mas madaling mga balangkas? Malinaw Ngunit hindi sa ganoong pagganap.
      - Inilagay ko ang link sa dokumentasyon sa artikulong xDDD.
      - Bakit ko nasabi na ito ay isang krimen ay dahil naniniwala ako na ang isang web page ay dapat na kasing husay hangga't maaari, sa lahat ng paraan. Tulad ng nabanggit ko dati, may mga frameworks na mas madaling gamitin, ngunit ang paggamit ng wheezy.web ay hindi rin C program. Kailangan mo lang subukang mas mahirap :).

      Pagbati ^^.

  3.   lajto dijo

    Sa pamamagitan ng paraan, kung sakaling may tamad na malaman at iniisip na ang Wheezy Web ay nanalo lamang sa mga kahilingan bawat segundo ... Narito ang ilan pang mga benchmark:

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

    Humihingi ako ng paumanhin para sa hindi ko isinasama ang mga ito dati. Akala ko ang isa ay sapat na upang gumuhit ng pag-usisa xD. Cheers!

  4.   fenriz dijo

    Sa ngayon masaya kasama si Django.

    1.    oclay dijo

      Ehh sa tuwing nababasa ko ang mga bagay na ito ay galit ito sa akin, naisip ko na kasama lamang ito ng mga php frameworks (Symfony, Yii, CondeIgniter, Phalcon ...... Kung ang Django ay mayroon nang isang pamayanan (medyo malaki) at mahusay na balangkas, bakit sa halip na mag-aksaya ng oras na muling likhain ang gulong, huwag sumali sa koponan ng django. @ Lajto sa iyong pakikipag-usap sa may-akda ng wheezy.web, bakit hindi tinanong mo siya? Kung hindi mo pa naisip na sumali sa koponan ng django, sumpain ito. Cheers ..

      1.    lajto dijo

        Bagaman pareho ang mga balangkas sa web, magkakaiba ang mga diskarte nito. Ang Django ay mabigat, mayroon itong maraming code, habang ang wheezy.web ay magaan, nakatuon ito sa pagiging simple at pag-optimize. Sa aking pagkakaalam, ang wheezy.web ay ang tanging tunay na modular na balangkas ng web ng Python (iyon ay, hinahati nito ang lahat ng code nito sa iba't ibang bahagi na maaaring gumana nang nakapag-iisa). Mayroon itong maraming mga katangian na naiiba ito mula sa iba pa.

        Bakit hindi ka sumali sa Django, sabi mo? Dahil ang Django ay dinisenyo na may ganap na magkakaibang mga diskarte. Paano mo mailalapat ang isang modular na disenyo sa Django? Ito ay kailangang muling gawing praktikal mula sa simula! Ang pareho sa maraming iba pang mga isyu.

        Nauunawaan ko na ang "mas mahusay na isang solong balangkas na gumagana nang maayos sa isang malaking pamayanan" na pakiramdam, ngunit hindi ito ganoon kadali. Para maunawaan mo lang, sa pamamagitan ng paggawa ng isang mababaw na asosasyon, ang Django ay parang ito ay si Debian at wheezy.web na para bang… Arch? Gentoo? Tiyak na isang masamang halimbawa, ngunit sa palagay ko naiintindihan ang xDDD.

        Pagbati!

  5.   Ulises dijo

    Kumusta naman si Lajto, hey Gumagawa ako ng isang app at nabasa ko ang dokumentasyon ng wheezy.web at ito ang unang balangkas ng web ng sawa na naintindihan ko sa unang pagkakataon see Kita mo, wala akong masyadong kaalaman sa mga network at web, ngunit ako may isang espesyal na akit sa pagprogram.
    Maaari mo ba akong tulungan kung paano baguhin ang mundo ng hello upang gawin itong isang pampublikong server? Marahil ito ay isang napaka-uto na tanong, paumanhin, ngunit hindi ko makita sa dokumentasyon kung paano ito gagawin.
    Ang isa pang tanong, 😉 sa mga pamamaraan ng pagkuha at pag-post, sa pagbabalik ko ng impormasyon na hindi isang pahina ng html, ibabalik ko rin ba ang impormasyon? bilang isang string o isang listahan o anumang uri ng data. Ang client isang app sa android.

    1.    lajto dijo

      Hello Ulises! Natutuwa akong sinusubukan mo ang wheezy.web: D.

      Tungkol sa kung ano ang iyong puna, lubos kong inirerekumenda na huwag mong mai-mount ang iyong sariling istraktura. Medyo mahusay ang sinasakyan ni Andriy, kaya inirerekumenda kong sundin mo ito. Sa artikulo mayroong dalawang mga link sa blog ni Andriy kung saan ipinaliwanag niya ang mga hakbang sa i18n at walang i18n. Kung sakaling medyo nakalilito, ipaliwanag ko kung paano ito gawin nang walang i18n sa ibaba:

      Magbukas ng isang terminal at patakbuhin ang apat na utos na ito (palitan ang "test-web" ng pangalan ng folder na gusto mo para sa iyong proyekto):

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

      i-unzip ang quickstart-empty.zip

      mv quickstart-walang laman na test-web

      rm quickstart-empty.zip

      Kung nais mong gumamit ng PIL, baguhin ang setup.py file at huwag paganahin ang kaukulang code. Kapag handa ka na, patakbuhin ang sumusunod na tatlong mga utos:

      web-test-cd

      gumawa ng env

      env / bin / easy_install uwsgi

      Ang iyong server ay naka-mount na. Kung nais mong gumawa ng isang mabilis na benchmark upang makita kung ito ay gumagana, na nasa loob ng folder, nagpapatakbo ng:

      gumawa ng benchmark ng takip sa ilong ng pagsubok

      Inirerekumenda kong pumunta ka sa "etc / development.ini" at palitan ang "limit-as = 120" sa "limit-as = 512". Ito ay kung gaano karaming MB ng RAM uWSGI ang "kakainin", kaya't maaaring dagdagan ito sa hinaharap kung kinakailangan.

      Sa wakas, sa tuwing nais mong buksan ang iyong server, sapat na upang hanapin ang iyong sarili sa iyong folder ng proyekto at magpatupad:

      gumawa ng uwsgi

      Sa iba pang mga katanungan ... Bilang default, ang server ay na-program upang tumakbo sa localhost. Kung nais mong gawing pampubliko, dahil handa mo na ito at nais itong gamitin sa isang pisikal na server sa paggawa, buksan lamang ang "src / app.py" at hanapin ang sumusunod: make_server (", 8080, pangunahing). Ang unang parameter ay isang walang laman na string, tama? Kaya, doon mo inilagay ang IP ng iyong server. Ang pangalawang parameter ay ang port na nais mong gamitin, na sa pamamagitan ng default ay 8080.

      Sa wakas, kung ano ang sasabihin mo tungkol sa pagbabalik ng ibang bagay bukod sa HTML, syempre magagawa ito! Sa dokumentasyon ipinapaliwanag nila kung paano ibalik ang lahat: https://pythonhosted.org/wheezy.web/userguide.html#web-handlers

      Isang pagbati! Kahit anong sabihin mo sa akin;).

      1.    Ulises dijo

        Maraming salamat sa iyo, Lajto, talagang nilinaw mo ang aking mga pag-aalinlangan, sinubukan ko sa django ngunit tulad ng nabanggit ko sa iyo hindi ako isang system engineer at django sa palagay ko nagdadala ito ng higit pa sa kailangan ko, gumamit ng wheezy.web upang subukan ang isang application sa android at makipag-usap ito sa isang server. Isang bagay na napaka-simple ngunit medyo mabilis at praktikal. Hoy isa pang tanong, kamakailan lamang nakita ko na mayroong isang malaking abala sa http / 2, paano ko malalaman kung anong gumagana ang protocol wheezy.web? Maaari ba akong gumawa ng isang server na gumagamit ng http / 2 sa wheezy.web? O magrekomenda sa akin ng isang libro, blog, tutorial na nasa mga bloke na maaaring ipaliwanag ang buong bagay ng mga network at komunikasyon. Salamat ulit.

      2.    lajto dijo

        Kumusta ulit Ulises ^^.

        Ang HTTP / 2 ay napakahusay at hindi seryosong gagamitin sa loob ng isa pang 1 taon, kaya huwag mag-abala dito :). Kung nais mo ng seguridad, gumamit ng HTTPS at iyon na.

        Hindi ako sigurado kung ano ang ginagamit ng Wheezy Web para sa HTTP, kaya ipinapalagay kong ito ay magiging WSGI.

        Pagbati!

  6.   lajto dijo

    Sa pamamagitan ng paraan, isang maliit na isang bagay ng wala. Sa ilang mga distrito isang mensahe ng BABALA tungkol sa .python-egg ang lilitaw. Walang nangyayari kung lilitaw ito, ngunit kung nakakaabala ito, maaari mo itong alisin sa:

    chmod go = ~ / .python-egg

    Pagbati!

  7.   Diego dijo

    Gumagamit ako ng Django, ngunit susuriin ko ang dokumentasyon upang makita kung paano ito gumagana. Salamat sa pagbabahagi. Cheers

  8.   JD Villegas dijo

    Maaari itong magamit mula sa windows !!!, may tutorial ba?

    Salamat

  9.   lalita dijo

    Kumusta marami kaming karanasan sa Python. Tila sa akin na sila ay nagmumula laban sa kasalukuyang. Ang pinakamagandang bagay na naimbento para sa wikang ito ay ang Django. Maaari silang gumawa ng isang istatistika at kumunsulta sa daan-daang mga programmer mula sa buong mundo, bibigyan ka nito ng higit sa 80%, karamihan sa kanila ay hindi mali. Kung sila ay tumatakbo o lumangoy laban sa kasalukuyang, maaga o maya ay malulunod sila ...