Was ist so cool an Twisted? [geschlossen]

83

Ich höre zunehmend, dass Pythons Twisted Framework Rocks und andere Frameworks im Vergleich blass sind.

Kann jemand etwas Licht ins Dunkel bringen und möglicherweise Twisted mit anderen Netzwerkprogrammierungs-Frameworks vergleichen?

Anton Gogolev
quelle
2
Es scheint nichts da draußen zu geben , das sich auch nur aus der Ferne mit Twisted vergleichen lässt, daher ist diese Frage etwas schwer zu beantworten. Welche Alternativen erwägen Sie?
Sven Marnach
1
@Sven Ich bin nicht einmal ein Python-Entwickler, sondern nur neugierig, was Twisted so großartig macht, wie es angeblich ist.
Anton Gogolev
2
@Sven Marnach: Es hängt von einer Problemdomäne ab, z. B. geventist eine Alternative zu Twisted für die "Wahrsager" -Anwendung blip.tv/file/4883016
jfs

Antworten:

131

Es gibt viele verschiedene Aspekte von Twisted, die Sie vielleicht cool finden.

Twisted enthält viele, viele Protokollimplementierungen, was bedeutet, dass es höchstwahrscheinlich eine API gibt, mit der Sie mit einem Remote-System (in den meisten Fällen entweder Client oder Server) kommunizieren können - sei es HTTP , FTP , SMTP, POP3, IMAP4 , DNS , IRC, MSN, OSCAR, XMPP / Jabber , Telnet, SSH , SSL, NNTP , oder eine der wirklich obskuren Protokolle wie Finger oder ident oder einem der unteren Level - Protokoll-Aufbau-Protokolle wie DJB der netstrings , einfach zeilenorientierte Protokolle oder sogar eines der benutzerdefinierten Protokolle von Twisted wie Perspective Broker (PB) oderAsynchrones Messaging-Protokoll (AMP) .

Eine weitere coole Sache bei Twisted ist, dass Sie zusätzlich zu diesen Protokollimplementierungen auf niedriger Ebene häufig eine Abstraktion finden, die etwas einfacher zu verwenden ist. Wenn Sie beispielsweise einen HTTP-Server schreiben, bietet Twisted Web eine "Ressourcen" -Abstraktion, mit der Sie URL-Hierarchien aus Python-Objekten erstellen können, um zu definieren, wie auf Anforderungen geantwortet wird.

All dies ist mit kooperierenden APIs verbunden, hauptsächlich aufgrund der Tatsache, dass keine dieser Funktionen durch Blockieren im Netzwerk implementiert wird, sodass Sie nicht für jede Operation, die Sie ausführen möchten, einen Thread starten müssen . Dies trägt zur Skalierbarkeit bei, die häufig Twisted zugeschrieben wird (obwohl es sich um die Skalierbarkeit handelt, die nur einen einzelnen Computer betrifft, nicht um die Skalierbarkeit, mit der Ihre Anwendung auf einen ganzen Cluster von Hosts erweitert werden kann), da Twisted Tausende von Hosts verarbeiten kann Verbindungen in einem einzelnen Thread, die in der Regel besser funktionieren als Tausende von Threads, jeweils für eine einzelne Verbindung.

Das Vermeiden von Threading ist auch zum Testen und Debuggen von Vorteil (und damit zur Zuverlässigkeit im Allgemeinen). Da es in einem typischen Twisted-basierten Programm keine vorbeugende Kontextumschaltung gibt, müssen Sie sich im Allgemeinen keine Gedanken über das Sperren machen. Rennbedingungen, die von der Reihenfolge der verschiedenen Netzwerkereignisse abhängen, können durch Simulieren dieser Netzwerkereignisse auf einfache Weise getestet werden (während das Simulieren eines Kontextwechsels von den meisten (beliebigen?) Threading-Bibliotheken nicht bereitgestellt wird).

Twisted geht es auch sehr, sehr um Qualität . Daher werden Sie in einer Twisted-Version selten Regressionen finden , und die meisten APIs funktionieren einfach, auch wenn Sie sie nicht auf die übliche Weise verwenden (weil wir versuchen, alle Arten zu testen, wie Sie sie möglicherweise verwenden, nicht nur die übliche Weg). Dies gilt insbesondere für den gesamten Code, der in den letzten 3 oder 4 Jahren zu Twisted (oder geändert) hinzugefügt wurde, da seitdem eine 100% ige Leitungsabdeckung eine Mindesttestanforderung ist.

Eine weitere oft übersehene Stärke von Twisted sind die zehn Jahre, in denen verschiedene Plattform- Macken herausgefunden wurden . Es gibt viele undokumentierte Socket-Fehler auf verschiedenen Plattformen und es ist wirklich schwer zu lernen, dass sie überhaupt existieren, geschweige denn behandelt werden. Twisted hat nach und nach mehr und mehr davon behandelt, und es ist an dieser Stelle ziemlich gut. Jüngere Projekte haben diese Erfahrung nicht, daher verpassen sie obskure Fehlermodi, die wahrscheinlich nur Benutzern eines von Ihnen veröffentlichten Projekts passieren, nicht Ihnen.

Alles, was ich an Twisted am coolsten finde, ist, dass es eine ziemlich langweilige Bibliothek ist, mit der ich viele wirklich langweilige Probleme ignorieren und mich nur auf die interessanten und lustigen Dinge konzentrieren kann. :) :)

Jean-Paul Calderone
quelle
1
und sieht aus dem Link, den Sie über die Ressourcenabstraktion gegeben haben, schlecht dokumentiert aus. Aber danke für die tolle Antwort, Upvoting.
Vinipsmaker
Ein guter Punkt ist die Erklärung von "undokumentierten Socket-Fehlern". Schöne Erklärung. Vielen Dank.
Haranadh
Ich benutze Twisted und Django jetzt schon eine Weile und komme an den Punkt, an dem ich das Gefühl habe, Django durch Twisted ersetzen zu können. Klingt komisch, aber ich brauche nur eine Front-End-Anwendung und würde alle meine Protokolle auf Twisted definieren und ORM verwenden, um meine Datenbank zu verwalten. Ich sehe Twisted jedoch als das Framework, das nicht versucht, Sie dazu zu bringen, nur eines zu tun.
Durodola Opemipo
9

Nun, es ist wahrscheinlich nach Geschmack.

Mit Twisted können Sie auf einfache Weise ereignisgesteuerte Netzwerkserver / -clients erstellen, ohne sich wirklich um alles kümmern zu müssen, was dazu gehört. Und dank der MIT-Lizenz kann Twisted fast überall eingesetzt werden. Aber ich habe kein Benchmarking durchgeführt, daher habe ich keine Ahnung, wie es skaliert, aber ich schätze ziemlich gut.

Ein weiteres Plus wären die Twisted Projects , mit denen Sie schnell sehen können, wie Sie die meisten Server / Dienste implementieren, die Sie möchten.

Twisted hat auch einige großartige Dokumentationen . Als ich vor ein paar Wochen damit anfing, konnte ich schnell einen funktionierenden Prototyp bekommen.

Ganz neu in der Python-Szene, bitte korrigieren Sie mich, wenn ich falsch liege.

Johann du Toit
quelle
8
Einer der großen Vorteile des Starts mit Twisted besteht darin, dass es eine ganze Reihe von Skalierbarkeitsproblemen gibt, die aufgrund der Art und Weise, wie Twisted selbst entwickelt wurde, einfach nie auftreten. Es ermöglicht Ihnen, neue und kreative Wege zu finden, um sich in den Fuß zu schießen, anstatt zuerst alle alltäglichen Wege wiederzuentdecken, wenn Sie eine Netzwerkanwendung erstellen :)
ncoghlan
Ja, als Noobie selbst mit Twisted zu arbeiten, das habe ich schnell entdeckt. Und ich liebe es, wie mich die Architektur sehr an Netty [ jboss.org/netty ] erinnert, das ich ziemlich ausgiebig benutzt habe, so dass es sehr schnell ging, die Denkweise zu erlernen .
Johann du Toit