Welches dieser Frameworks / Bibliotheken eignet sich am besten zum Erstellen moderner Mehrbenutzer-Webanwendungen? Ich hätte gerne einen asynchronen Webserver, mit dem ich einfach skalieren kann. Welche Lösung bietet die beste Leistung / Skalierbarkeit / das nützlichste Framework ? (in Bezug auf Benutzerfreundlichkeit und einfache Entwicklung)?
Es wäre großartig, wenn es eine gute Funktionalität bieten würde (Websockets, RPC, Streaming usw.).
Was sind die Vor- und Nachteile jeder Lösung?
Antworten:
" Django ist ein Python-Webframework auf hoher Ebene, das eine schnelle Entwicklung und ein sauberes, pragmatisches Design fördert . " Wenn Sie etwas erstellen, das einer E-Commerce-Website ähnelt, sollten Sie sich wahrscheinlich für Django entscheiden. Es wird Ihre Arbeit schnell erledigen. Sie müssen sich nicht um zu viele Technologieoptionen kümmern. Es bietet alles, was Sie von der Template Engine bis zum ORM benötigen. Es wird eine leichte Meinung darüber sein, wie Sie Ihre App strukturieren, was gut ist, wenn Sie mich fragen. Und es hat die stärkste Community aller anderen Bibliotheken, was bedeutet, dass einfache Hilfe verfügbar ist.
" Flask ist ein Mikroframework für Python, das auf Werkzeug, Jinja 2 und guten Absichten basiert." .Achtung - "Mikroframework" kann irreführend sein. Dies bedeutet nicht, dass Flask eine halbgebackene Bibliothek ist. Dies bedeutet, dass der Kern des Kolbens sehr, sehr einfach ist. Im Gegensatz zu Django werden keine Technologieentscheidungen für Sie getroffen. Sie können jede Template-Engine oder ORM auswählen, die Ihnen gefällt. Obwohl es standardmäßig mit der Jinja Template Engine geliefert wird, können Sie jederzeit unsere eigene auswählen. Soweit ich weiß, ist Flask nützlich, um API-Endpunkte (RESTful-Services) zu schreiben.
" Twisted ist eine ereignisgesteuerte Netzwerk-Engine, die in Python geschrieben wurde" . Dies ist ein Hochleistungsmotor. Der Hauptgrund für seine Geschwindigkeit ist etwas, das als verzögert bezeichnet wird. Twisted baut auf aufgeschobenen Daten auf. Für diejenigen unter Ihnen, die nichts über Verzögerungen wissen, ist es der Mechanismus, der durch asynchrone Architektur erreicht wird. Verdreht ist sehr schnell. Ist aber nicht zum Schreiben herkömmlicher Webapps geeignet. Wenn Sie etwas auf niedriger Ebene vernetzen möchten, ist Twisted Ihr Freund.
" Tornado ist ein Python-Webframework und eine asynchrone Netzwerkbibliothek, die ursprünglich bei FriendFeed entwickelt wurden. Durch die Verwendung nicht blockierender Netzwerk-E / A kann Tornado auf Zehntausende offener Verbindungen skaliert werden, was es ideal für lange Abfragen, WebSockets und andere Anwendungen macht das erfordert eine langlebige Verbindung zu jedem Benutzer " . Tornado steht irgendwo zwischen Django und Flask. Wenn Sie etwas mit Django oder Flask schreiben möchten, aber eine bessere Leistung benötigen, können Sie sich für Tornado entscheiden. Es kann C10k-Probleme sehr gut behandeln, wenn es richtig aufgebaut ist.
" Cyclone ist ein Webserver-Framework für Python, das die Tornado-API als Twisted-Protokoll implementiert . " Was ist, wenn Sie etwas wollen, das fast so performant ist wie Twisted, aber einfach zu schreibende herkömmliche Webapps? Begrüßen Sie den Zyklon. Ich würde Cyclone Tornado vorziehen. Es hat eine API, die Tornado sehr ähnlich ist. In der Tat ist dies eine Gabelung des Tornados. Das Problem ist jedoch, dass es eine relativ kleine Gemeinschaft gibt. Alexandre Fiori ist der einzige Hauptverantwortliche für das Repo.
" Pyramid ist ein allgemeines Open-Source-Framework für die Entwicklung von Python-Webanwendungen. Sein Hauptziel ist es, einem Python-Entwickler das Erstellen von Webanwendungen zu erleichtern." Ich habe Pyramid nicht wirklich benutzt, aber ich habe die Dokumentation durchgesehen. Soweit ich weiß, ist Pyramid Flask sehr ähnlich, und ich denke, Sie können Pyramid überall dort verwenden, wo Flask angemessen erscheint, und umgekehrt.
EDIT : Bitte um Überprüfung anderer Frameworks ist willkommen!
Quelle: http://dhilipsiva.com/2013/05/19/python-libraries-django-twisted-tornado-flask-cyclone-and-pyramid.html
quelle
Dies ist offensichtlich eine etwas voreingenommene Antwort, aber das ist nicht dasselbe wie eine falsche Antwort; Sie sollten immer Twisted verwenden. Ich habe bereits ähnliche Fragen beantwortet , aber da Ihre Frage nicht ganz dieselbe ist, gibt es einige Gründe:
"Beste Leistung"
Twisted überwacht kontinuierlich unsere Leistung auf der Website speed.twistedmatrix.com . Wir waren auch eines der ersten Projekte , die von PyPys ähnlicher Site überwacht wurden , wodurch die gute Leistung von Twisted zur Laufzeit sichergestellt wurde, die jeder hat, der sich mit Hochleistungsanwendungen in Python befasst.
"Skalierbarkeit"
Meines Wissens hat keines der aufgelisteten Frameworks eine integrierte Unterstützung für die automatische Skalierung. Sie sind alle Kommunikations-Frameworks, daher müssen Sie die Arbeit erledigen, um zwischen Ihren Skalierungsknoten zu kommunizieren. Twisted hat jedoch einen Vorteil in seiner integrierten Unterstützung für die lokale Mehrfachverarbeitung . Fairerweise gibt es für Tornado ein Add-On von Drittanbietern , mit dem Sie dasselbe tun können. In den letzten Versionen hat Twisted Funktionen hinzugefügt , die die Anzahl der Möglichkeiten erhöhen, wie Sie die Arbeit zwischen Kernen teilen können. In diesem Bereich wird derzeit gearbeitet. Twisted verfügt außerdem über einige gut integrierte , "native" RPC-Protokolle, die einen Baukasten für jede Skalierungssprache bieten, die Sie verfolgen möchten.
"Am besten brauchbar"
Viele Leute scheinen Twisted sehr nützlich zu finden . So sehr, dass viele von ihnen es erweitert und Ihnen ihre Erweiterungen zur Verfügung gestellt haben.
"Funktionalität"
Im Lieferumfang von Twisted sind enthalten:
Zumindest in dieser letzten Abteilung scheint Twisted ein klarer Gewinner für integrierte Funktionen zu sein. Und das alles in einem Paket von etwas mehr als 2 Megabyte!
quelle
spawnProcess
diese E / A-Planung mithilfe von auch in die CPU-Planung übersetzt werden.Ich mag @Glyph Antwort. Twisted ist ein sehr umfassendes, reichhaltiges Python-Framework. Twisted und Tornado haben ein sehr ähnliches Design. Und ich mag dieses Design sehr:
Aber ich möchte Tornado hervorheben , den ich bevorzuge und der in letzter Zeit an Popularität gewinnt. Tornado verwendet wie Twisted die Programmierung im Rückrufstil, kann jedoch mithilfe von
tornado.gen.engine
(twisted.internet.inlineCallbacks
in Twisted) eingebunden werden .Codebasis
Der beste Kommentar stammt von der Website http://cyclone.io . Zyklon versucht Twisted und Tornado zu mischen, weil:
Aber im Jahr 2011
tornado.platform.twisted
war heraus, was ähnliche Funktionen bringt.Performance
Tornado hat eine viel bessere Leistung . Es funktioniert auch nahtlos mit PyPy und erzielt einen enormen Gewinn.
Skalierbarkeit
Das gleiche wie Twisted. Tornado hat
tornado.process
und viele RPC-Dienste darüber implementiert.Funktionalität
Es gibt 71 Tornado-basierte Pakete im Vergleich zu 148 Twisted's und 48 Gevent's. Wenn Sie jedoch genau hinschauen und den Median der Upload-Zeit für Pakete berechnen, werden Sie feststellen, dass Twisted die ältesten und Gevent und Tornado die frischesten sind. Darüber hinaus gibt es ein
tornado.platform.twisted
Modul, mit dem Sie Code ausführen können, der für Twisted on Tornado geschrieben wurde .Zusammenfassung
Mit Tornado können Sie einen Code von Twisted verwenden. Es ist nicht erforderlich, einen Zyklon zu verwenden, der nur Ihren Code verdreht (Ihr Code wird unordentlicher).
Für 2014 gilt Tornado als allgemein anerkanntes und standardmäßiges asynchrones Framework, das sowohl auf Python2 als auch auf Python3 funktioniert. Auch die neueste Version 4.x bietet viele Funktionen von https://docs.python.org/dev/library/asyncio.html .
Ich schrieb einen Artikel, in dem erklärt wurde, warum ich diesen Tornado für das beste Python-Webframework halte, in dem ich viel mehr über die Tornado-Funktionalität geschrieben habe.
quelle
( UPDATE : Ich bin traurig überrascht, wie wenige Antworten hier Gevent empfehlen oder sogar erwähnen - ich denke nicht, dass dies im Verhältnis zur Popularität, Leistung und Benutzerfreundlichkeit dieser hervorragenden Bibliothek steht!)
Gevent und Twisted schließen sich nicht gegenseitig aus, auch wenn das Gegenteil zunächst offensichtlich erscheint. Es gibt ein Projekt namens,
geventreactor
das es einem ermöglicht, das Beste aus beiden Welten relativ reibungslos zu nutzen, nämlich:inlineCallbacks
in Bezug auf Parallelität viel einfacher zu programmieren ist - ehrlich gesagt ist Twisted's in Bezug auf die Leistung bei vielen Coroutinen einfach nicht der Aufgabe gewachsen, und auch nicht in Bedingungen für Benutzerfreundlichkeit / Transparenz:yield
undDeferreds
überall; oft schwer, einige Abstraktionen zu erstellen; schrecklich nutzlose Stapelspuren sowohl mit nacktenDeferred
s als auch und noch mehr mit@inlineCallbacks
.IReactorProcess.spawnProcess
.Ich persönlich verwende derzeit Gevent 1.0rc2 mit Twisted 12.3, das von überbrückt wird
geventreactor
. Ich habe meine eigenen, noch nicht veröffentlichten Ergänzungen und Verbesserungen implementiert,geventreactor
die ich bald veröffentlichen werde, hoffentlich als Teil desgeventreactor
ursprünglichen GitHub-Repositorys: https://github.com/jyio/geventreactor .Mein aktuelles Layout ermöglicht es mich zu Programm im schönen Programmiermodell von GEVENT und Hebel Dingen wie eine nicht-blockierende
socket
,urllib2
und anderen Module. Ich kann normalen Python-Code verwenden, um normale Dinge zu erledigen, im Gegensatz zu der Lernkurve und der Unannehmlichkeit, selbst einfache, grundlegende Dinge auf verdrehte Weise zu erledigen. Ich kann auch problemlos die meisten Bibliotheken von Drittanbietern verwenden, die normalerweise entweder mit Twisted nicht in Frage kommen oder die Verwendung von Threads erfordern.Ich kann auch die umständliche und oft zu komplexe, auf Rückrufen basierende Programmierung vollständig vermeiden, indem ich Greenlets verwende (anstelle von
Deferred
s und Rückrufen und / oder@inlineCallbacks
).(Diese Antwort basiert auf meinen persönlichen Erfahrungen mit Twisted und Gevent in realen Projekten, mit deutlich mehr Erfahrung mit Twisted (aber ich behaupte nicht, ein Twisted-Experte zu sein). Die Software, die ich schreiben musste, ist nicht vorhanden Es mussten nicht zu viele Funktionen von Twisted verwendet werden. Abhängig von den Funktionen, die Sie für Twisted benötigen, ist die (relativ schmerzlose) zusätzliche Komplexität beim Mischen von Gevent und Twisted möglicherweise nicht die Mühe wert.)
quelle