[Programowanie] Najszybszy framework sieciowy Pythona: wheezy.web

wheezy_web_logo

wheezy.web nie ma logo; Obraz zrobiłem w GIMP-ie.

Od dłuższego czasu przestałem programować w Pythonie, ale to nie przeszkadza mi w dzieleniu się z Wami technologiami, które znam;). Jakiś czas temu zacząłem szukać „najlepszego” frameworka internetowego w Pythonie, ponieważ ten, którego użyłem (Web2Py) był diabelnie wolny. Moje badania doprowadziły mnie do tego wheezy.web; ci, którzy go znają, z pewnością zrobili to przez spektakularny benchmark wykonany przez autora na swoim blogu:

Python-najszybszy-framework-sieciowy

Wiem, 25.000 XNUMX żądań na sekundę w porównaniu z resztą frameworków to prawdziwa passa. Sam użyłem wheezy.web przez chwilę i muszę przyznać, że to prawdziwe dzieło sztuki. Gdziekolwiek na to spojrzysz: szybkość, prostota, bezpieczeństwo ... Wszystko. A ponad nim jest dzieło jednej osoby: Andriy Kornatskyy.

  • Działa z plikami Python 2, Python 3 y pypy. Nawet jeśli 3 daje lepszą wydajność, lepiej jest kontynuować używanie 2, dopóki 3 nie będzie wystarczająco dojrzałe.
  • Jego projekt to Modułowa, więc wheezy.web jest więcej rzeczy: wheezy.szablon, wheezy.html, sapanie.zabezpieczenie… Użyj części, które chcesz.
  • dokumentacja proste i łatwe do zrozumienia.
  • Automatyczna optymalizacja HTML (kompresuje go tak, aby zajmował mniej bez użycia narzędzi zewnętrznych).
  • Jak mogłoby być inaczej? wolne oprogramowanie i open source ; D.
  • itd ...

Na blogu Andriya są świetne samouczki dla zainstalować wheezy.web do wyschnięcia o z i18n (wiele języków); również wyjaśnia jak używać wheezy.web z Nginx. Wadą wszystkich jego tutoriali jest to, że załóżmy, że używasz Debiana, ponieważ nie testował na innych dystrybucjach.

Jeśli używasz Fedora i jesteś zainteresowany wheezy.web, jesteś szczęściarzem! Oto polecenie, które zainstaluje niezbędne pakiety, aby móc śledzić jego samouczki:

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

Samouczek, który Andriy oferuje do zainstalowania wheezy.web z Nginx używa skryptu zaprojektowanego specjalnie dla Debiana, więc będziesz musiał zrobić to sam, jeśli używasz innego systemu. W moim przypadku uWSGI mi wystarcza, więc nigdy tego nie próbowałem.

Prawda jest taka, że ​​istnieje wheezy.web Uważam za przestępstwo używanie innego frameworka, więc jeśli pracujesz z Pythonem, przyjrzyj się temu przynajmniej! Jedyną wadą, jaką można mu przypisać, jest to, że nie wnosi żadnej warstwy abstrakcji, która ułatwiałaby pracę z bazami danych (nie musi, ale są ludzie, którzy to doceniają).

I to wszystko. Krótki, ale trafny artykuł. Obiecuję przynieść więcej ciekawych technologii! Do zobaczenia ~.

A propos, ciekawostka, czy wiesz, dlaczego nazywa się to „wheezy”? Andriy jest fanem Debiana. Zostawiam to tam;).


Treść artykułu jest zgodna z naszymi zasadami etyka redakcyjna. Aby zgłosić błąd, kliknij tutaj.

22 komentarzy, zostaw swoje

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany.

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.

  1.   Bruno cascio powiedział

    Wydajność nie jest jedynym czynnikiem. W porównaniu do Django jest dość nieczytelny. I szczerze mówiąc, 25000 żądań na sekundę powinno być postrzegane w akcji, ale wolę pozostać przy 15000 (django), aby pisać zdrowo, a resztę pracy delegować do infrastruktury, która NAPRAWDĘ jest tą, która ma otrzymać lub nie, 25000 wniosków.

    Pozdrowienia! Dzięki za dane 🙂

    1.    Bruno cascio powiedział

      Nie trzeba dodawać, że do testów porównawczych używam starych wersji innych frameworków ...

      1.    lajto powiedział

        Artykuł dotyczący benchmarku pochodzi z 2012 roku. Zmodyfikował go i ponownie rozszerzył w 2013 roku i sam określił, że pochodzą z tego roku: «Najnowsze dostępne wersje na dzień pisania tego tekstu (15 marca 2013)»

    2.    lajto powiedział

      Nieczytelność, o której wspomniałeś, nie wydaje mi się taka zła. Rozumiem, że często poszukuje się łatwości programowania, ale nie sądzę, aby były naprawdę duże różnice. Używałem Web2Py przez rok i zapewniam, że jest to jeden z najłatwiejszych w użyciu dostępnych frameworków. Oczywiście jego wydajność jest straszna pod wieloma względami ... W artykule porównawczym sam Massimo Di Pierro (twórca Web2Py) przeprowadza debatę z Andriyem, w której ostatecznie przyznaje, że jest wiele do poprawienia; rozmawiając z Andriyem na IRC, powiedział mi, że "istnieje szeroko akceptowana filozofia umieszczania wszystkiego w frameworkach i nadużywania ich funkcjami, mimo że większość nie jest używana" i jak miał rację ...

      O tym, co mówisz o infrastrukturze, częściowo dzielę się tym, co mówisz; 10.000 różnic to DUŻO, zwłaszcza gdy mówimy o najpopularniejszym i dojrzałym frameworku w porównaniu z bardzo niedawnym i mało znanym. Moje podejście zawsze polega na łączeniu maksymalnej wydajności z maksymalną produktywnością i myślę, że wheezy.web robi to najlepiej. Korzystałem z Web2Py (najczęściej), Django, Pyramid i wheezy.web i zapewniam, że jest bezkonkurencyjny. Kiedy już dostosujesz się do jego sposobu działania, nie odrywasz się od niego. Jedyne zalety Django to duża społeczność, którą posiada i zasoby w całym Internecie; to znaczy: łatwość. wheezy.web jest w porównaniu z nim całkiem nowy i niewiele osób o tym wie; jeśli pójdziesz łatwo, lepiej Web2Py lub Django xD.

      Nie chcę się rozwijać, ale kiedy mówimy o żądaniach na sekundę, mówimy o współbieżności. Jeśli poszukuje się współbieżności, Python nie jest odpowiednim językiem. Do tego służą inne języki, takie jak Erlang czy Haskell (a jeśli mnie pośpieszysz, Rust). Ale właśnie z tego powodu imponujące jest to, że wheezy.web zajmując tak mało kodu, będąc pracą człowieka w czasie wolnym i nie tylko, udało się osiągnąć takie wyniki.

      Rozumiem, co mówisz o „zdrowym pisaniu”, ale nigdy nie wiesz, jak bardzo projekt może się rozwinąć w dłuższej perspektywie. Używając bardziej wydajnych i współbieżnych narzędzi, a także prostszych (utrzymuję, że wheezy.web jest prosty ze względu na wydajność), oszczędzaj pieniądze i wydłużaj projekt bez zmiany języka. Ostatecznie wszystko jest w pieniądzach, które musisz zapłacić serwerowi. Istnieją bardzo znane strony internetowe w PHP, gdzie PHP ma straszną wydajność ... Ale jak rozwiązać ten problem? Kupowanie lepszych serwerów. W drugim podejściu rozwiązuje się go poprzez lepsze programowanie i oszczędzanie zasobów: P.

      Przepraszam, że tak bardzo się przedłużyłam. Bardzo łatwo pasjonuję się xDDD. Pozdrowienia!

      1.    Bruno cascio powiedział

        Zrozumiałem doskonale, co masz na myśli, ale właśnie z powodu tego, o czym wspomniałeś, czy projekt ma tendencję do rozwoju, czy nie, ponieważ idziemy z wheezy, nie ma warstwy bazy danych.

        Z mojego punktu widzenia najlepiej nie poślubiać żadnego języka. Jeśli chcesz współbieżności, możesz również użyć Node, jego silnik działa w C.

        To, co wspominasz o wydajności, to nie tylko skalowanie w pionie (w przypadku PHP), Facebook na przykład oferuje HHVM, o którym przeczytałem (nie testowałem), który poprawia wydajność o 50% i nie jest to kupowanie serwerów. Mówiąc najprościej, PHP bez warstw pamięci podręcznej i / lub innych sposobów optymalizacji jest tak samo „zły”, jak każdy inny język bez tego drugiego, i mam na myśli złe nadawanie im nazwy, to nie tylko „lepsze programowanie”.

        Twoje zdrowie! 🙂

      2.    lajto powiedział

        Zobaczmy, nie ma warstwy abstrakcji. Ale używasz odpowiedniej biblioteki lub modułu do pracy z bazą danych i poza nią, nie ma więcej tajemnic. Na przykład warstwa abstrakcji Web2Py jest bardzo prosta, ale wydajność dramatycznie spada, ponieważ nie można nawet napisać zoptymalizowanego kodu SQL. Wszystko jest w Pythonie; łatwe, ale w zamian za wydajność.

        Znam HHVM i właśnie dlatego języki takie jak PHP są okropne w dzisiejszych czasach; gdyby Facebook był w Haskell lub Erlang, tworzenie HHVM nie byłoby konieczne. Użyj pamięci podręcznej, kompresuj wysyłane i odbierane pliki itp. są oczywistymi aspektami każdego rozwoju. Problem w tym, że narzędzie musi dorównać :). A są narzędzia, które tego nie dają. Najlepszym tego przykładem jest JavaScript ... W takim razie przynajmniej istnieją cuda, takie jak CoffeeScript, Dart itp. które kompilują się do JS.

        Pozdrowienia!

      3.    Bruno cascio powiedział

        Doskonały! 🙂

        Tylko jedno, facebook jeśli używasz haskell, a dokładniej Haxl 🙂

      4.    Zaprzestać powiedział

        Cóż, często używam web2py, zgadzam się, że nie jest to najszybszy framework, ale ten benchmark wydaje się trochę nie na miejscu, tym bardziej, że gdy mówimy o 3 lata temu, witaj głupia aplikacja web2py jest bardzo załadowana w porównaniu do innych frameworków, ale szczerze mówiąc, nie doświadczyłem tak fatalnej różnicy w wydajności między moimi aplikacjami napisanymi w web2py i django.

        Nawiasem mówiąc, w web2py, jeśli możesz napisać SQL, aby bezpośrednio wykonywać zapytania.

        Pozdrowienia.

  2.   urKh powiedział

    Najszybszy framework sieciowy, który mówisz, ale nie pokazujesz niektórych przykładów i innych kluczowych czynników, takich jak programowanie, produktywność, dokumentacja. Istniejące django, nie wiem, dlaczego nieużywanie tego wydaje się przestępstwem: str

    1.    lajto powiedział

      - W dokumentacji są już przykłady. Na jego stronie BitBucket również: https://bitbucket.org/akorn/wheezy.web/src/tip/demos/
      - Jeśli chodzi o rozwój i produktywność, osobiście uważam, że podsumowanie tego w „prostocie” to dobra opcja. Jakie są jeszcze prostsze i łatwiejsze frameworki? Pewnie. Ale nie przy tak dużej wydajności.
      - Link do dokumentacji umieściłem w artykule xDDD.
      - Powodem, dla którego mówię, że jest to przestępstwo, jest to, że uważam, że strona internetowa powinna być jak najbardziej wydajna pod każdym względem. Jak wspomniałem wcześniej, istnieją frameworki, które są łatwiejsze w użyciu, ale używanie wheezy.web też nie jest programowaniem w C. Musisz tylko bardziej się postarać :).

      Pozdrowienia ^^.

  3.   lajto powiedział

    Nawiasem mówiąc, gdyby ktoś był leniwy, aby dowiedzieć się i myśli, że Wheezy Web wygrywa tylko w żądaniach na sekundę ... Oto kilka innych testów porównawczych:

    http://paste.desdelinux.net/5128 (Filtr spamu FromLinux nie pozwala mi umieścić tak wielu linków)

    Przepraszam, że nie uwzględniłem ich wcześniej. Pomyślałem, że wystarczy jeden, by zaciekawić xD. Pozdrowienia!

  4.   Fenriza powiedział

    Jak dotąd zadowolony z Django.

    1.    oclay powiedział

      Ech, za każdym razem, gdy czytam te rzeczy, denerwuję się, myślałem, że to tylko z frameworkami php (Symfony, Yii, CondeIgniter, Phalcon ……… wdf !!). Jeśli Django ma już społeczność (dość dużą) i jest świetnym frameworkiem, dlaczego zamiast tracić czas na wymyślanie koła na nowo, nie dołączaj do zespołu django. @ Lajto w rozmowie z autorem wheezy.web, dlaczego nie zapytasz go Jeśli nigdy nie myślałeś o dołączeniu do zespołu django, do cholery.

      1.    lajto powiedział

        Chociaż oba to frameworki internetowe, mają bardzo różne podejścia. Django jest ciężki, zawiera dużo kodu, podczas gdy wheezy.web jest lekki, stawia na prostotę i optymalizację. O ile mi wiadomo, wheezy.web jest jedynym prawdziwie modularnym frameworkiem sieciowym Python (to znaczy, że dzieli cały swój kod na różne części, które mogą działać niezależnie). Ma wiele cech, które odróżniają go od reszty.

        Dlaczego nie dołączyć do Django, mówisz? Ponieważ Django zostało zaprojektowane z zupełnie innym podejściem. Jak zastosować projekt modułowy do Django? Musiałby zostać przerobiony praktycznie od zera! To samo z wieloma innymi kwestiami.

        Rozumiem, że „lepszy pojedynczy framework, który działa dobrze w dużej społeczności”, ale nie jest to takie proste. Tak, żebyś zrozumiał, tworząc powierzchowne skojarzenie, Django wygląda tak, jakby to był Debian i wheezy.web, jakby był… Arch? Gentoo? To zdecydowanie zły przykład, ale myślę, że xDDD jest zrozumiałe.

        Pozdrowienia!

  5.   Ulises powiedział

    A co z Lajto, hej, tworzę aplikację i czytam dokumentację wheezy.web i jest to pierwszy framework sieciowy Pythona, który zrozumiałem po raz pierwszy 🙂 Widzisz, nie mam zbyt dużej wiedzy na temat sieci i sieci, ale ja mają specjalną atrakcję w programowaniu.
    Czy możesz mi pomóc, jak zmodyfikować hello world, aby stał się serwerem publicznym? Może to bardzo głupie pytanie, przepraszam, ale nie mogę znaleźć w dokumentacji, jak to zrobić.
    Kolejne pytanie: 😉 Czy w metodach get i post zwracam informacje, które nie są stroną html, czy zwracam informacje takie, jakie są? jako ciąg, lista lub dowolny typ danych. Klient aplikacja na Androida.

    1.    lajto powiedział

      Cześć Ulises! Tak się cieszę, że testujesz wheezy.web: D.

      Co do tego, co komentujesz, bardzo polecam nie montować własnej konstrukcji. Ten, na którym jeździ Andriy, jest całkiem niezły, więc polecam go śledzić. W artykule znajdują się dwa linki do bloga Andriya, na którym wyjaśnia kroki z i18n i bez i18n. Na wypadek, gdyby było to trochę zagmatwane, poniżej wyjaśnię, jak to zrobić bez i18n:

      Otwórz terminal i uruchom te cztery polecenia (zamień „test-web” na nazwę folderu, który chcesz umieścić w swoim projekcie):

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

      rozpakuj quickstart-empty.zip

      mv quickstart-empty test-web

      rm quickstart-empty.zip

      Jeśli chcesz używać PIL, zmodyfikuj plik setup.py i usuń komentarz z odpowiedniego kodu. Gdy będziesz gotowy, uruchom następujące trzy polecenia:

      web-test-cd

      robić zazdrość

      env / bin / easy_install uwsgi

      Twój serwer jest już zamontowany. Jeśli chcesz zrobić szybki test porównawczy, aby sprawdzić, czy działa, będąc w folderze, uruchamiasz:

      wykonać test porównawczy osłony nosa

      Zalecam przejście do „etc / development.ini” i zmianę „limit-as = 120” na „limit-as = 512”. Tyle MB pamięci RAM „zużyje” uWSGI, aby w przyszłości można go było zwiększyć, jeśli zajdzie taka potrzeba.

      Wreszcie, za każdym razem, gdy chcesz otworzyć serwer, wystarczy zlokalizować się w folderze projektu i wykonać:

      zrobić uwsgi

      Co do innych pytań ... Domyślnie serwer jest zaprogramowany do działania na hoście lokalnym. Jeśli chcesz go upublicznić, ponieważ masz go już gotowego i chcesz go użyć na fizycznym serwerze w środowisku produkcyjnym, po prostu otwórz "src / app.py" i zlokalizuj: make_server (", 8080, main). Pierwszy parametr to pusty ciąg, prawda? Cóż, tam umieszczasz adres IP swojego serwera. Drugi parametr to port, którego chcesz użyć, który domyślnie to 8080.

      Wreszcie, co mówisz o zwracaniu czegoś innego niż HTML, oczywiście, że możesz! W dokumentacji wyjaśniają, jak wszystko zwrócić: https://pythonhosted.org/wheezy.web/userguide.html#web-handlers

      Pozdrowienie! Cokolwiek mi powiesz;).

      1.    Ulises powiedział

        Dziękuję bardzo Lajto, naprawdę wyjaśniłeś moje wątpliwości, próbowałem z django, ale jak ci powiedziałem, nie jestem inżynierem systemowym i myślę, że django przynosi znacznie więcej niż potrzebowałem, użyj wheezy.web do przetestowania aplikacji na android i komunikuj się z serwerem. Coś bardzo prostego, ale dość szybkiego i praktycznego. Hej, jeszcze jedno pytanie, ostatnio widziałem, że było duże zamieszanie z http / 2, skąd mam wiedzieć, na jakim protokole działa wheezy.web? Czy mogę zrobić serwer, który używa http / 2 w wheezy.web? Lub poleć mi książkę, blog, poradnik w blokach, które mogą wyjaśnić całą sprawę sieci i komunikacji. Dzięki jeszcze raz.

      2.    lajto powiedział

        Witam ponownie Ulises ^^.

        HTTP / 2 jest bardzo świeży i nie będzie poważnie zaadoptowany przez kolejny rok, więc nie przejmuj się nim :). Jeśli chcesz bezpieczeństwa, użyj HTTPS i to wszystko.

        Nie jestem pewien, czego używa Wheezy Web dla HTTP, więc zakładam, że będzie to WSGI.

        Pozdrowienia!

  6.   lajto powiedział

    Nawiasem mówiąc, coś z niczego. W niektórych dystrybucjach pojawia się OSTRZEŻENIE o .python-eggs. Nic się nie dzieje, jeśli się pojawi, ale jeśli uznasz to za irytujące, możesz je usunąć za pomocą:

    chmod go = ~ / .python-eggs

    Pozdrowienia!

  7.   Diego powiedział

    Używam Django, ale sprawdzę dokumentację, aby zobaczyć, jak to działa. Dzięki za udostępnienie. pozdrowienia

  8.   JDVillegas powiedział

    Może być używany z systemu Windows !!!, czy istnieje tutorial?

    dzięki

  9.   Lalita powiedział

    Cześć, mamy duże doświadczenie z Pythonem. Wydaje mi się, że wiosłują pod prąd. Najlepszą rzeczą, jaką kiedykolwiek wymyślono dla tego języka, jest Django. Mogą sporządzić statystyki i skonsultować się z setkami programistów z całego świata, da ci to ponad 80%, większość się nie myli. Jeśli wiosłują lub płyną pod prąd, prędzej czy później utoną ...