Która z tych frameworków / bibliotek byłaby najlepszym wyborem do budowy nowoczesnej aplikacji internetowej dla wielu użytkowników? Chciałbym mieć asynchroniczny serwer WWW, który pozwoli mi łatwo skalować. Jakie rozwiązanie zapewni najlepszą wydajność / skalowalność / najbardziej przydatne ramy (pod względem łatwości użytkowania i łatwości opracowywania)?
Byłoby świetnie, gdyby zapewnił dobrą funkcjonalność (websockets, rpc, streaming itp.).
Jakie są zalety i wady każdego rozwiązania?
Odpowiedzi:
„ Django to wysokopoziomowy framework Python Web, który zachęca do szybkiego rozwoju i czystego, pragmatycznego projektowania” . Jeśli budujesz coś podobnego do witryny e-commerce, prawdopodobnie powinieneś skorzystać z Django. Dzięki temu Twoja praca zostanie wykonana szybko. Nie musisz się martwić o zbyt wiele wyborów technologicznych. Zapewnia wszystko, czego potrzebujesz, od silnika szablonów po ORM. Zostanie lekko poparta opiniami na temat struktury aplikacji, co jest dobre, jeśli mnie zapytasz. I ma najsilniejszą społeczność ze wszystkich innych bibliotek, co oznacza, że dostępna jest łatwa pomoc.
„ Flask to mikrocząsteczka dla Pythona oparta na Werkzeug, Jinja 2 i dobrych intencjach” . Uwaga - „mikrozarządzanie” może wprowadzać w błąd. Nie oznacza to, że Flask jest biblioteką na wpół upieczoną. Oznacza to, że rdzeń kolby jest bardzo, bardzo prosty. W przeciwieństwie do Django, nie będzie podejmować żadnych decyzji dotyczących technologii. Masz swobodę wyboru dowolnego silnika szablonów lub ORM, który Ci się podoba. Mimo że domyślnie jest wyposażony w silnik szablonów Jinja, zawsze możesz wybrać własny. O ile wiem Flask jest przydatny do pisania punktów końcowych API (usługi RESTful).
„ Twisted to oparty na zdarzeniach silnik sieciowy napisany w języku python” . To silnik o wysokiej wydajności. Głównym powodem jego szybkości jest coś, co nazywa się odroczonym. Twisted jest zbudowany na odroczeniach. Dla tych z was, którzy nie wiedzą o odroczeniach, jest to mechanizm osiągnięty dzięki architekturze asynchronicznej. Twisted jest bardzo szybki. Ale nie nadaje się do pisania konwencjonalnych aplikacji internetowych. Jeśli chcesz zrobić coś w sieci na niskim poziomie, twisted jest twoim przyjacielem.
„ Tornado to framework sieciowy Python i biblioteka sieci asynchronicznych, pierwotnie opracowane w FriendFeed. Dzięki zastosowaniu nieblokujących sieciowych we / wy, Tornado może skalować się do dziesiątek tysięcy otwartych połączeń, dzięki czemu idealnie nadaje się do długiego odpytywania, WebSockets i innych aplikacji które wymagają długotrwałego połączenia z każdym użytkownikiem " . Tornado stoi pomiędzy Django i Flask. Jeśli chcesz napisać coś z Django lub Flask, ale jeśli potrzebujesz lepszej wydajności, możesz wybrać Tornado. potrafi dobrze poradzić sobie z problemem C10k, jeśli jest odpowiednio zaprojektowany.
„ Cyclone to framework serwera WWW dla Pythona, który implementuje interfejs API Tornado jako protokół Twisted” . Co jeśli chcesz czegoś, co jest prawie tak wydajne jak Twisted, ale łatwe do pisania konwencjonalne aplikacje internetowe? Przywitaj się z cyklonem. Wolałbym Cyklon niż Tornado. Ma API, które jest bardzo podobne do Tornado. W rzeczywistości jest to widelec Tornado. Problem w tym, że ma relatywnie małą społeczność. Alexandre Fiori jest jedynym głównym inicjatorem repozytorium.
„ Pyramid to ogólna platforma programistyczna do tworzenia aplikacji internetowych w języku open source. Jego głównym celem jest ułatwienie programistom Python tworzenia aplikacji internetowych”. Tak naprawdę nie korzystałem z Pyramid, ale przejrzałem dokumentację. Z tego, co rozumiem, Pyramid jest bardzo podobny do Flask i myślę, że możesz używać Pyramid wszędzie tam, gdzie Flask wydaje się odpowiedni i odwrotnie.
EDYCJA : Przyjmujemy prośbę o przejrzenie innych ram!
Źródło: http://dhilipsiva.com/2013/05/19/python-libraries-django-twisted-tornado-flask-cyclone-and-pyramid.html
źródło
Jest to oczywiście dość stronnicza odpowiedź, ale to nie to samo, co zła odpowiedź; zawsze powinieneś używać Twisted. Odpowiedziałem wcześniej na podobne pytania , ale ponieważ twoje pytanie nie jest takie samo, oto kilka powodów:
"Najlepsza wydajność"
Twisted stale monitoruje naszą wydajność na stronie speed.twistedmatrix.com . Byliśmy również jednym z pierwszych projektów monitorowanych przez podobną witrynę PyPy , zapewniając tym samym dobrą wydajność Twisted w środowisku wykonawczym, którą każdy zainteresowany wysokowydajnymi aplikacjami w Pythonie.
„Skalowalność”
O ile mi wiadomo, żaden z wymienionych frameworków nie ma wbudowanej obsługi automatycznego skalowania; wszystkie są strukturami komunikacyjnymi, więc musisz wykonać pracę, aby komunikować się między swoimi węzłami skalowania. Jednak Twisted ma tę zaletę, że ma wbudowaną obsługę lokalnego przetwarzania wielu elementów . Szczerze mówiąc, istnieje dodatek do Tornado innej firmy, który pozwala robić to samo. W ostatnich wydaniach Twisted dodał funkcje, które zwiększają liczbę sposobów dzielenia pracy między rdzeniami, a praca w tym obszarze trwa. Twisted ma również kilka dobrze zintegrowanych , „natywnych” protokołów RPC, które oferują zestaw konstrukcyjny dla dowolnego idiomu skalowania, który chcesz realizować.
"Najbardziej użyteczne"
Wiele osób uważa, że Twisted jest bardzo przydatny . Tak bardzo, że wielu z nich rozszerzyło go i udostępniło ci swoje rozszerzenia.
„Funkcjonalność”
Po wyjęciu z pudełka Twisted obejmuje:
W tym ostatnim dziale Twisted wydaje się wyraźnym zwycięzcą pod względem wbudowanej funkcjonalności. A wszystko to w paczce nieco ponad 2 megabajty!
źródło
spawnProcess
tego planowania we / wy można również przełożyć na planowanie procesora.Lubię odpowiedź @Glyph. Twisted jest bardzo wszechstronnym, bogatym frameworkiem Pythona. Twisted i Tornado mają bardzo podobny projekt. Bardzo podoba mi się ten projekt:
Ale chcę podkreślić Tornado , które wolę i ostatnio zyskało popularność. Tornado, podobnie jak Twisted, wykorzystuje programowanie w stylu wywołania zwrotnego, ale można je wstawiać za pomocą
tornado.gen.engine
(twisted.internet.inlineCallbacks
w Twisted).Codebase
Najlepszy komentarz pochodzi ze strony http://cyclone.io . cyklon próbuje połączyć Twisted i Tornado, ponieważ:
Ale w 2011 roku
tornado.platform.twisted
został wydany, który przynosi podobną funkcjonalność.Występ
Tornado ma znacznie lepszą wydajność . Działa również płynnie z PyPy i zyskuje ogromny zysk.
Skalowalność
To samo co Twisted. Tornado ma
tornado.process
i wiele usług RPC zaimplementowanych na nim.Funkcjonalność
Istnieje 71 pakietów opartych na Tornado, w porównaniu do 148 Twisted i 48 Gevent. Ale jeśli przyjrzysz się uważnie i obliczysz medianę czasu wysyłania pakietów, zobaczysz, że Twisted są najstarsze, a następnie Gevent i Tornado najświeższe. Ponadto istnieje
tornado.platform.twisted
moduł, który pozwala uruchamiać kod napisany dla Twisted na Tornado .Podsumowanie
W Tornado możesz użyć kodu z Twisted. Nie ma potrzeby używania cyklonu, który jedynie przekręca kod (kod staje się bardziej nieuporządkowany).
Jeśli chodzi o 2014 r., Tornado jest uważane za powszechnie akceptowaną i domyślną platformę asynchroniczną, która działa zarówno na python2, jak i python3. Również najnowsza wersja 4.x oferuje wiele funkcji z https://docs.python.org/dev/library/asyncio.html .
Napisałem artykuł, wyjaśniając, dlaczego uważam, że Tornado - najlepsza platforma internetowa Python, w której napisałam znacznie więcej o funkcjonalności Tornado.
źródło
( AKTUALIZACJA : Jestem niestety zaskoczony, jak niewiele odpowiedzi tutaj poleca, a nawet wspomina o Gevencie - nie sądzę, aby było to proporcjonalne do popularności, wydajności i łatwości korzystania z tej doskonałej biblioteki!)
Gevent i Twisted nie wykluczają się nawzajem, chociaż na początku może się wydawać oczywiste. Istnieje projekt,
geventreactor
który pozwala stosunkowo płynnie wykorzystać to, co najlepsze z obu światów, a mianowicie:inlineCallbacks
po prostu nie radzi sobie z wydajnością, jeśli chodzi o wiele korporacji, i ani w warunki łatwości / przejrzystości użytkowania:yield
iDeferreds
wszędzie; często trudno zbudować jakieś abstrakcje; przerażająco bezużyteczne ślady na stosie zarówno z nagimi,Deferred
jak i jeszcze bardziej z@inlineCallbacks
.IReactorProcess.spawnProcess
.Obecnie osobiście używam Gevent 1.0rc2 z Twisted 12.3 zmostkowanym przez
geventreactor
. Wdrożyłem własne niepublikowane jeszcze dodatki i rozszerzenia dogeventreactor
które wkrótce opublikuję, mam nadzieję, że w ramachgeventreactor
oryginalnego repozytorium GitHub: https://github.com/jyio/geventreactor .Mój obecny układ pozwala mi programować w ładnym modelu programowania Gevent i wykorzystywać takie rzeczy, jak nieblokowanie
socket
,urllib2
i innych modułów. Mogę używać zwykłego kodu Python do robienia regularnych czynności, w przeciwieństwie do krzywej uczenia się i niedogodności związanych z robieniem nawet prostych, podstawowych rzeczy w Twisted sposób. Mogę również z łatwością korzystać z większości bibliotek stron trzecich, które zwykle nie są kwestionowane w Twisted lub wymagają użycia wątków.Mogę również całkowicie uniknąć niewygodnego i często zbyt złożonego programowania opartego na wywołaniu zwrotnym, używając greenletów (zamiast
Deferred
s i callbacków i / lub@inlineCallbacks
).(Ta odpowiedź została napisana w oparciu o moje osobiste doświadczenia z wykorzystaniem zarówno Twisted, jak i Gevent w rzeczywistych projektach, ze znacznie większym doświadczeniem w korzystaniu z Twisted (ale nie twierdzę, że jestem ekspertem od Twisted). Oprogramowanie, które musiałem napisać, nie ma musiałem użyć zbyt wielu funkcji Twisted, więc w zależności od zestawu funkcji wymaganych od Twisted, (stosunkowo bezbolesna) dodatkowa złożoność mieszania Gevent i Twisted może nie być warta kłopotów).
źródło