[Programavimas] Greičiausia „Python“ žiniatinklio sistema: wheezy.web

wheezy_web_logotipas

švokštimas.žiniatinklis Ji neturi logotipo; Paveikslėlį padariau GIMP.

Seniai nustojau programuoti Python, bet tai man netrukdo dalintis su jumis žinomomis technologijomis ;). Prieš kurį laiką buvau pasinėręs į „geriausios“ žiniatinklio sistemos „Python“ paieškas, nes mano naudojama („Web2Py“) buvo velniškai lėta. Mano tyrimas atvedė mane iki švokštimas.žiniatinklis; Tie, kurie jį pažįsta, tikrai tai padarė įspūdingas etalonas, kurį autorius padarė savo tinklaraštyje:

python-fastest-web-framework

Aš žinau, 25.000 XNUMX užklausų per sekundę Palyginti su likusiais rėmais, tai tikrai nuostabu. Aš pats naudojau švokštimas.žiniatinklis kurį laiką ir turiu pasakyti, kad tai tikras meno kūrinys. Kad ir kur bežiūrėtum: greitis, paprastumas, saugumas... Viskas. Be to, tai vieno žmogaus – Andriaus Kornackio – darbas.

  • Veikia su python 2, python 3 y pypy. Nors 3 užtikrina geresnį našumą, geriau naudoti 2, kol 3 pakankamai subręs.
  • Jo dizainas yra Modulinė, taip švokštimas.žiniatinklis Yra ir daugiau dalykų: švokštimas.šablonas, wheezy.html, švokštimas.saugumas…Naudokite visas norimas dalis.
  • dokumentacija paprastas ir lengvai suprantamas.
  • Automatinis HTML optimizavimas (suspaudžia jį taip, kad užimtų mažiau vietos, nenaudojant išorinių įrankių).
  • Kaip ir negalėjo būti kitaip, taip yra nemokama programinė įranga ir atvirasis šaltinis ;D.
  • ir tt ...

Andriaus tinklaraštyje yra puikių vadovėlių įrengti švokštimas.žiniatinklis išdžiūti o su i18n (keliomis kalbomis); taip pat paaiškina kaip naudoti švokštimas.žiniatinklis su Nginx. Visų jūsų vadovėlių trūkumas yra tas daro prielaidą, kad naudojate Debian, nes jis to neišbandė kitose distrose.

Jei naudojate Minkšta fetrinė skrybėlė ir tau įdomu švokštimas.žiniatinklis, jums sekasi! Čia yra komanda, kuri įdiegs reikalingus paketus, kad galėtumėte sekti mokymo programas:

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

Pamoka, kurią Andrius siūlo įdiegti švokštimas.žiniatinklis su „Nginx“ jis naudoja specialiai „Debian“ sukurtą scenarijų, todėl turėsite tai padaryti patys, jei naudosite kitą sistemą. Mano atveju man pakanka uWSGI, todėl niekada jo nebandžiau.

Tiesa ta, kad egzistuoja švokštimas.žiniatinklis Naudoti kitą sistemą man atrodo nusikaltimas, todėl jei dirbate su Python, bent jau patikrinkite! Vienintelis trūkumas, kurį galima priskirti, yra tai, kad jame nėra jokio abstrakcijos sluoksnio, palengvinančio darbą su duomenų bazėmis (ir to nereikia, bet yra žmonių, kurie tai vertina).

Ir viskas. Trumpas, bet aktualus straipsnis. Pažadu atsivežti įdomesnių technologijų! Iki pasimatymo~.

Beje, smalsumas, ar žinote, kodėl tai vadinama "švipu"? Andrius yra „Debian“ gerbėjas. Palieku ten ;).


Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.

  1.   Bruno cascio sakė

    Našumas nėra vienintelis veiksnys. Palyginti su Django, tai gana neįskaitoma. Ir atvirai kalbant, 25000 15000 užklausų per sekundę turėtų būti matomi veikiant, bet aš norėčiau likti 25000 XNUMX (django) parašyti sveikai, o likusį darbą deleguoti infrastruktūrai, kuri TIKRAI yra ta, kuri jus gaus arba ne. XNUMX XNUMX prašymų.

    Sveikinimai! Ačiū už duomenis 🙂

    1.    Bruno cascio sakė

      Nereikia nė sakyti, kad norint atlikti etaloną, naudoju senas kitų karkasų versijas...

      1.    lajto sakė

        Etaloninis straipsnis yra 2012 m. Jis jį pakeitė ir vėl išplėtė 2013 m., o pats nurodo, kad jie yra iš tų metų: „Naujausios galimos versijos šio rašymo metu (15 m. kovo 2013 d.)“

    2.    lajto sakė

      Nemanau, kad jūsų minimas neįskaitomumas yra toks didelis dalykas. Suprantu, kad dažnai žmonės ieško lengvumo programuodami, bet nemanau, kad iš tikrųjų yra didelių skirtumų. „Web2Py“ naudojau metus ir užtikrinu, kad tai yra viena iš lengviausiai naudojamų sistemų. Žinoma, jo pasirodymas daugeliu atžvilgių yra baisus... Etaloniniame straipsnyje pats Massimo Di Pierro (Web2Py kūrėjas) diskutuoja su Andriumi, kuriame galiausiai pripažįsta, kad tobulėti yra daug; Kalbėdamasis su Andriumi per IRC, jis man pasakė: „yra plačiai priimta filosofija viską sudėti į rėmus ir užpildyti funkcijomis, nors dauguma jų nenaudojamos“, ir kaip jis buvo teisus...

      Kalbant apie tai, ką sakote apie infrastruktūrą, aš iš dalies sutinku su tuo, ką sakote; 10.000 2 skirtumas yra DAUG, ypač kai kalbame apie populiariausią ir brandžiausią sistemą, palyginti su labai nauja ir mažai žinoma sistema. Mano požiūris visada yra derinti maksimalų efektyvumą su maksimaliu produktyvumu, ir manau, kad wheezy.web tai daro geriausiai. Naudojau Web2Py (daugiausia), Django, Pyramid ir wheezy.web ir patikinu, kad jis neturi konkurento. Kai prisitaikysite prie jo būdo, pasilikite su juo. Vienintelis „Django“ pranašumas yra didelė jo bendruomenė ir ištekliai, kurie yra visame internete; tai yra: lengvumas. wheezy.web yra gana naujas palyginimas, ir labai mažai žmonių apie tai žino; Jei jums sekasi lengvai, geriau WebXNUMXPy arba Django xD.

      Nenoriu gilintis į detales, bet kai kalbame apie užklausas per sekundę, mes kalbame apie lygiagretumą. Jei ieškote lygiagretumo, Python nėra tinkama kalba. Tam skirtos kitos kalbos, pvz., Erlang ar Haskell (o jei paskubinsite mane, Rust). Bet kaip tik dėl šios priežasties įspūdinga, kad wheezy.web, naudodamas tiek mažai kodo, būdamas žmogaus laisvalaikiu darbas ir dar viena eilė faktorių, sugebėjo pasiekti tokį našumą.

      Suprantu, ką sakote apie „sveikai rašyti“, bet niekada nežinai, kiek projektas gali išaugti ilgainiui. Naudodami efektyvesnius ir vienu metu veikiančius įrankius, taip pat paprastus (manau, kad wheezy.web yra paprastas dėl savo našumo), galite sutaupyti pinigų ir pailginti projekto mastą nekeičiant kalbų. Galų gale viskas priklauso nuo pinigų, kuriuos turite sumokėti savo serveriui. PHP yra labai žinomų svetainių, kai PHP yra siaubingas našumas... Bet kaip jie išsprendžia tą problemą? Geresnių serverių pirkimas. Kitu būdu tai išsprendžiama geriau programuojant ir taupant resursus :P.

      Atsiprašau, kad taip ilgai tęsiau. Mane labai lengva aistringa xDDD. Sveikinimai!

      1.    Bruno cascio sakė

        Puikiai supratau apie ką tu kalbi, bet kaip tik dėl to, ką paminėjai, ar projektas linkęs augti, ar ne, nes mes einame su wheezy nėra duomenų bazės sluoksnio.

        Mano požiūriu, geriausia netekėti jokios kalbos. Jei norite lygiagretumo, taip pat galite naudoti „Node“, kurio variklis veikia C.

        Tai, ką minite apie našumą, nėra tik vertikalus mastelio keitimas (PHP atvejis), pvz., „Facebook“ teikia HHVM, kurį aš perskaičiau (neišbandžiau), pagerina našumą 50% ir tai nėra serverių pirkimas. Paprastas PHP be talpyklos sluoksnių ir (arba) kitų optimizavimo formų yra toks pat "blogas", kaip ir bet kuri kita kalba be pastarosios, ir aš sakau blogai, kad suteikčiau jiems pavadinimą, tai nėra tik "geresnis programavimas".

        Cheers! 🙂

      2.    lajto sakė

        Pažiūrėkime, ko nėra, tai abstrakcijos sluoksnis. Bet jūs naudojate atitinkamą biblioteką ar modulį, kad dirbtumėte su savo duomenų baze, ir toli, nebėra jokios paslapties. Pavyzdžiui, Web2Py abstrakcijos sluoksnis yra labai paprastas, tačiau našumas labai sumažėja, nes net negalite rašyti optimizuoto SQL. Viskas yra Python; lengva, bet našumo kaina.

        Žinau HHVM ir būtent todėl tokios kalbos kaip PHP yra baisios šiais laikais; Jei „Facebook“ būtų „Haskell“ arba „Erlang“, HHVM kurti nebūtų reikėję. Naudokite talpyklą, suglaudinkite siunčiamus ir gaunamus failus ir pan. Jie yra akivaizdūs bet kokio vystymosi aspektai. Problema ta, kad įrankis turi būti matuojamas :). Ir yra įrankių, kurie to nesuteikia. Geriausias to pavyzdys yra JavaScript... Tokiu atveju bent jau yra tokie stebuklai kaip CoffeeScript, Dart ir t.t. kad kompiliuoti į JS.

        Sveikinimai!

      3.    Bruno cascio sakė

        Puikus! 🙂

        Tik vienas dalykas, Facebook naudoja Haskell, tiksliau Haxl :)

      4.    Nustoti sakė

        Na, aš daug naudoju web2py, sutinku, kad jis nėra pats greičiausias karkasas, bet man tas etalonas atrodo šiek tiek netinkamas, tuo labiau, kai kalbame apie prieš 3 metus, web2py hello mudo programa yra labai pakrauta lyginant su kitomis sistemomis, bet aš, tiesą sakant, nepatyriau tokio baisaus našumo skirtumo tarp mano programų, parašytų web2py ir django.

        Beje, web2py galite rašyti SQL, kad užklausos būtų atliktos tiesiogiai.

        Sveikinimai.

  2.   urKh sakė

    Sakote greičiausią žiniatinklio sistemą, bet nerodote jokių pavyzdžių ir kitų pagrindinių veiksnių, tokių kaip plėtra, produktyvumas, dokumentacija. Kadangi django egzistuoja, aš nežinau, kodėl atrodo nusikaltimas nenaudoti šio :p

    1.    lajto sakė

      – Dokumentacijoje jau yra pavyzdžių. Taip pat jų BitBucket puslapyje: https://bitbucket.org/akorn/wheezy.web/src/tip/demos/
      – Kalbant apie plėtrą ir produktyvumą, aš asmeniškai manau, kad apibendrinti „paprastumu“ yra geras pasirinkimas. Ar yra dar paprastesnių ir lengvesnių karkasų? Aišku. Bet ne su dideliu našumu.
      – Nuorodą į dokumentaciją įdėjau straipsnyje xDDD.
      – Aš sakau, kad tai yra nusikaltimas, nes manau, kad svetainė turi būti kiek įmanoma efektyvesnė visomis prasmėmis. Kaip jau minėjau anksčiau, yra lengviau naudoti karkasus, bet naudojant wheezy.web tai taip pat nėra programavimas C. Reikia tik pasistengti :).

      Sveikinimai ^^.

  3.   lajto sakė

    Beje, jei kas nors tingėtų informuoti save ir manytų, kad Wheezy Web laimi tik užklausų per sekundę skaičiumi... Štai dar keletas etalonų:

    http://paste.desdelinux.net/5128 (šlamšto filtras DesdeLinux Tai neleis man įdėti tiek daug nuorodų)

    Atsiprašau, kad jų neįtraukiau anksčiau. Maniau, kad užtenka vieno smalsumui sukelti xD. Sveikinimai!

  4.   Fenrizas sakė

    Kol kas patenkintas Django.

    1.    Oklis sakė

      Ech, kiekvieną kartą kai skaitau šiuos dalykus, mane piktina, maniau, kad tai tik su php karkasais (Symfony, Yii, CondeIgniter, Phalcon......wdf!!). Jei Django jau turi (gana didelę) bendruomenę ir yra puikus pagrindas, kodėl, užuot gaišęs laiką išradęs dviratį, neprisijungi prie django komandos? @Lajto pokalbyje su wheezy.web autoriumi, kodėl gi ne tu jo klausi?Jei niekada negalvojote apie prisijungimą prie django komandos, nusišik. Pagarbiai...

      1.    lajto sakė

        Reikalas tas, kad nors abi yra žiniatinklio sistemos, jų požiūris labai skiriasi. Django yra sunkus, jame yra daug kodo, o wheezy.web yra lengvas, atsidavęs paprastumui ir optimizavimui. Kiek žinau, wheezy.web yra vienintelė tikrai modulinė Python žiniatinklio sistema (ty visą savo kodą padalija į skirtingas dalis, kurios gali veikti nepriklausomai). Jis turi daug savybių, kurios išskiria jį iš kitų.

        Sakai, kodėl neprisijungus prie Django? Kadangi „Django“ buvo sukurtas naudojant visiškai skirtingus metodus. Kaip „Django“ pritaikyti modulinį dizainą? Jį tektų perdaryti praktiškai nuo nulio! Tas pats su daugeliu kitų klausimų.

        Suprantu tą jausmą, kad „geresnė viena sistema, kuri gerai veiktų su didele bendruomene“, bet tai nėra taip paprasta. Kad suprastumėte mane, paviršutiniškai susieti Django yra tarsi Debianas ir wheezy.web... Arch? Gentoo? Tai tikrai blogas pavyzdys, bet manau, kad tai suprantama xDDD.

        Sveikinimai!

  5.   Ulises sakė

    Kaip dėl Lajto, aš kuriu programėlę ir skaitau wheezy.web dokumentaciją ir tai yra pirmoji žiniatinklio struktūra python, kurią supratau pirmą kartą 🙂 Matai, aš neturiu daug žinių apie tinklus ir žiniatinklyje, bet mane ypač traukia programavimas .
    Ar galėtumėte man padėti, kaip pakeisti Hello World, kad jis taptų viešu serveriu? Galbūt tai labai kvailas klausimas, atsiprašau, bet dokumentacijoje nerandu, kaip tai padaryti.
    Kitas klausimas, 😉 gauti ir paskelbti metoduose, kaip grąžinti informaciją, kuri nėra HTML puslapis, ar grąžinti informaciją tokią, kokia yra? pvz., eilutę, sąrašą arba bet kokio tipo duomenis. Klientas programa android.

    1.    lajto sakė

      Sveiki, Ulise! Labai džiaugiuosi, kad bandai wheezy.web :D.

      Kalbant apie tai, ką paminėjote, labai rekomenduoju nekurti savo struktūros. Tas, kuriuo Andrius važiuoja, yra gana geras, todėl rekomenduoju jį sekti. Straipsnyje yra dvi nuorodos į Andriaus tinklaraštį, kur jis paaiškina veiksmus su i18n ir be i18n. Jei tai šiek tiek painu, toliau paaiškinu, kaip tai padaryti be i18n:

      Atidarykite terminalą ir paleiskite šias keturias komandas (pakeiskite „test-web“ aplanko, kurio norite savo projektui, pavadinimu):

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

      išpakuokite Quickstart-empty.zip

      mv Quickstart-empty-test-web

      rm Quickstart-empty.zip

      Jei norite naudoti PIL, pakeiskite failą setup.py ir panaikinkite atitinkamo kodo komentarą. Kai būsite pasiruošę, vykdykite šias tris komandas:

      CD žiniatinklio testas

      padaryti env

      env/bin/easy_install uwsgi

      Jūsų serveris dabar nustatytas. Jei norite greitai patikrinti, ar jis veikia, būdami aplanke, paleiskite:

      atlikti bandomąjį nosies dangtelio etaloną

      Rekomenduoju eiti į "etc/development.ini" ir pakeisti "limit-as = 120" į "limit-as = 512". Būtent tiek MB RAM uWSGI „suvalgys“, tad ateityje prireikus ją būtų galima padidinti.

      Galiausiai kiekvieną kartą, kai norite atidaryti serverį, tiesiog eikite į projekto aplanką ir paleiskite:

      padaryti uwsgi

      Apie kitas problemas... Pagal numatytuosius nustatymus serveris yra užprogramuotas veikti vietinėje priegloboje. Jei norite padaryti jį viešą, nes jau turite jį paruošę ir norite naudoti jį fiziniame serveryje gamyboje, tiesiog atidarykite „src/app.py“ ir suraskite: make_server(“, 8080, main). Pirmasis parametras yra tuščia eilutė, tiesa? Na, ten įdedate savo serverio IP. Antrasis parametras yra norimas naudoti prievadas, kuris pagal numatytuosius nustatymus yra 8080.

      Galiausiai, tai, ką pasakėte apie kažko kito, nei HTML, grąžinimą, žinoma, galite! Dokumentuose paaiškina, kaip viską grąžinti: https://pythonhosted.org/wheezy.web/userguide.html#web-handlers

      Viskas kas geriausia! Tu man pasakyk bet ką ;)

      1.    Ulises sakė

        Labai ačiū, Lajto, tu tikrai išsklaidei mano abejones, aš bandžiau su django, bet, kaip sakiau, nesu sistemų inžinierius ir manau, kad django suteikia daug daugiau, nei man reikia. „Android“ ir susisiekite su serveriu . Kažkas labai paprasto, bet gana greito ir praktiško. Sveiki, dar vienas klausimas, neseniai pamačiau, kad kilo didelis triukšmas dėl http/2, kaip sužinoti, kokiu protokolu wheezy.web veikia? Ar galiu sukurti serverį, kuris naudotų http/2 svetainėje wheezy.web? Arba rekomenduokite knygą, dienoraštį, pamoką, kuri yra obuoliuose ir gali paaiškinti man visą tinklų ir ryšių problemą. Ačiū dar kartą.

      2.    lajto sakė

        Sveiki dar kartą, Ulisai ^^.

        HTTP/2 yra labai nesenas ir nebus pradėtas rimtai priimti 1 metus, todėl nesijaudinkite :). Jei norite saugumo, naudokite HTTPS ir viskas.

        Nesu tikras, ką Wheezy Web naudoja HTTP, todėl spėju, kad tai WSGI.

        Sveikinimai!

  6.   lajto sakė

    Beje, išvis šiek tiek. Kai kuriose platinimo programose apie .python-eggs pasirodo ĮSPĖJIMO pranešimas. Gerai, jei jis pasirodo, bet jei jis erzina, galite jį pašalinti naudodami:

    chmod go= ~/.python-eggs

    Sveikinimai!

  7.   Diegas sakė

    Naudoju Django, bet patikrinsiu dokumentus, kad pamatyčiau, kaip viskas vyksta. Ačiū už dalinimąsi. Sveikinimai

  8.   JD Villegas sakė

    Ar galima jį naudoti iš Windows!!!, ar yra kokia pamoka?

    Ačiū

  9.   lalita sakė

    Sveiki, turime daug patirties su Python. Man atrodo, kad jie irkluoja prieš srovę. Geriausias dalykas, kuris buvo išrastas šiai kalbai, yra Django. Galite atlikti statistiką ir konsultuotis su šimtais programuotojų iš viso pasaulio, tai jums duos daugiau nei 80%, dauguma neklysta. Jei irkluoja ar plaukia prieš srovę, anksčiau ar vėliau nuskęs...