2010-06-04 15 views
7

Ich höre all diesen Hype über Twisted für Python, aber ich finde es einfach nur verwirrend. Was ist Ihrer Meinung nach einfacher zu benutzen? Einfache Sockets oder Implementieren von Twisted?Ist etwas gut verdreht?

+0

Einfache Steckdosen? Implementieren verdreht. –

Antwort

26

stehe ich, was ich schrieb in Python in a Nutshell (2. Auflage S. 540.):

Verdrehte enthält leistungsstarke, High-Level Komponenten wie Web-Server, Benutzer Authentifizierungssysteme, Mailserver und Kunden , Instant Messaging, SSH Clients und Server, ein DNS-Server und Client, und so weiter, sowie die untergeordnete Infrastruktur, auf der all diese High-Level-Komponenten sind gebaut. Jede Komponente ist hoch skalierbar und leicht anpassbar, und alle sind integriert, um reibungslos zu interoperieren. Es ist eine Hommage an die Macht von Python und an den Einfallsreichtum von Twisted-Entwickler, die so viel können innerhalb von zwei Megabyte Wert des Downloads durchgeführt werden. wenn ein Auto ist „einfacher zu bedienen“ als eine Schraube

Erkundigung, ob diese unglaublich reiche und mächtige Rahmen „einfacher zu bedienen“, als „einfache Steckdosen“ ist ein bisschen wie zu fragen ist: was für ein seltsam Frage!

Autos sind gebaut mit Schrauben (unter anderem), und kann nicht ganz so "einfach zu bedienen" sein - nur weil eine Schraube so wenig tut, macht ein Auto so viel.

Aber wenn Sie von A nach B kommen wollen (und möglicherweise Passagiere, Gepäck, Haustiere, ...) eine Schraube wird nicht viel helfen (es sei denn, Sie werden im Grunde ein Auto von Grund auf neu zu bauen; -).

Natürlich sind Autos nicht der einzige Weg, um von A nach B zu kommen, genauso wie verdreht ist nicht die einzige Möglichkeit, netzwerkzentrierte Systeme in Python zu bauen. Ein Pferd und Buggy (wie asyncore) ist malerisch und lustig, wenn auch weniger praktisch; Ein Hochgeschwindigkeitszug (wie tornado) ist möglicherweise einfacher zu bedienen und mindestens genauso schnell, wenn auch viel weniger flexibel; und für verschiedene spezialisierte Zwecke können Sie alle Arten von anderen Beförderungen bevorzugen, von Einrädern bis zu Kreuzfahrtschiffen (wie in Python und für die Vernetzung, alle Arten von anderen Paketen, von paramiko bis dnspython) - alle von ihnen werden Schrauben als Teil enthalten ihre Komponenten (wie alle werden Sockets als Teil der Art, wie sie gebaut werden) enthalten, wird keiner so einfach zu bedienen sein wie "einfache Sockets", jeder (in seinem eigenen Anwendungsbereich) wird viel mehr für Sie tun als "einfache Steckdosen" könnten möglicherweise alleine.

Twisted ist eine ausgezeichnete Wahl in einer Vielzahl von Fällen, oft die beste, wenn Sie mehrere Aspekte der Funktionalität integrieren müssen und/oder ein Protokoll implementieren, für das es keine vollständig gepackte Lösung gibt. "Einfache Sockets" sind es nicht - sie sind nur eine Low-Level-Komponente, aus der höhere Funktionalität, höhere Ebenen, gebaut werden, und es gibt selten einen guten Grund (außer natürlich zu lernen), "eigene" zu rollen "Komponenten auf höherer Ebene, die" von Grund auf neu "auf Steckdosen aufgebaut sind (anstatt mächtige, gut gebaute bestehende zu wählen) - genau so, wie Sie es selten tun würden, Ihren eigenen Computer aus Transistoren, Widerständen, Kondensatoren usw. zu bauen. anstatt geeignete integrierte Schaltungen auszuwählen ;-).

+0

Nun, ich will nur lernen. Deshalb habe ich gefragt: b Ich möchte lernen, das Auto zu bauen! : P – Jake

+1

hoffe es gibt ein "Twisted in Kürze". Ich liebe das Buch "Python auf den Punkt gebracht" und "Python Cookbook". Ich kann immer noch nicht richtig Code mit twistedmatrix schreiben, um das aktuelle Twisted Buch und Twisted Dokument zu lesen ... – sunqiang

+0

@Jake, lernen, Autos zu bauen ist ein wunderbares Unterfangen. Leider gibt es dafür kein wirklich gutes Lehrbuch (zumindest nicht auf Basis von Python), aber Sie können Schritt für Schritt lernen, indem Sie Sockets, TCP/IP, darüber liegende Protokolle und die Implementierung einiger Protokolle im Python-Standard studieren Bibliothek (plain vanilla, kein Multitasking), dann threading vs async systems, asyncore, twisted (jeweils Mischen "Wie benutze ich es für Task X" mit "Wie wird das intern umgesetzt und warum haben sie diese Designentscheidung getroffen"?). Lange Reise in der Tat, aber, große Lernvoraus! -) –

4

Twisted ist ein Parallelitätsrahmen. Es ermöglicht Ihnen, mehrere Aufgaben in einer Anwendung zu jonglieren, ohne Threads/Prozesse zu verwenden. Dies geschieht mit einem ereignisgesteuerten asynchronen System und eignet sich besonders gut für Netzwerkanwendungen. Asynchroner Code tendiert im Allgemeinen dazu, ein wenig "anders" von normalen Dingen zu sein, da der Fluss nicht explizit ist und Dinge auf der Grundlage von externen Ereignissen geschehen. Das kann verwirrend sein, aber es funktioniert. Twisted ist wohl die ausgereifteste Python-asynchrone Concurrency-Bibliothek. Wenn Sie also vorhaben, dies zu tun, ist Twisted eine gute Sache, auf die Sie wetten können.

"Einfache Sockets", wie Sie sie setzen, sind Kommunikationsprimitiven und nicht wirklich vergleichbar mit verdreht. Was versuchst du zu machen?

0

Twisted wurde erstmals im Jahr 2002 veröffentlicht und hat seitdem erheblich aufgebläht; (Dies ist ein heikles Thema und viele Leute würden argumentieren, dass dies in einem Rahmen gut und notwendig ist) - Jedoch für jemanden, der sich dem Projekt jetzt nähert, kann es etwas entmutigend sein. Es gibt jedoch Optionen, wenn Sie auf asynchrone Frameworks drängen. Ich fand diesen Blog interessant: http://nichol.as/asynchronous-servers-in-python. Abgesehen von den Benchmarks sind die Codebeispiele allein zum Vergleich sehr interessant.

+3

verdreht ist schwer, stimme ich zu, aber nicht aufgebläht. Es ist ein sehr befreiendes Gefühl, wenn man etwas sucht und es innen verdreht findet - bereits implementiert, getestet und bereit zu gehen. –