2010-09-02 2 views
6

Ich muss von Hunderten von Pop3 E-Mail-Konten ziehen, und ich möchte einen robusten Server dafür erstellen.Wäre twisted eine gute Wahl für den Aufbau eines Multi-Thread-Servers?

Würde Twisted eine gute Wahl für diese Art von Projekt sein?

Im Moment wäre ein einfacher Prototyp, von einem einzigen pop3-Konto zu ziehen, dann würde es von vielen ziehen, aber es wäre ein serialisierter Prozess.

Ich möchte einen Server erstellen, der mehrere Threads hat, so dass es Dinge gleichzeitig tun kann.

Antwort

7

Twisted ist ein ereignisgesteuertes Netzwerk-Framework, das in Python geschrieben wurde. Es baut stark auf asynchronen und nicht-blockierenden Funktionen und ist am besten konzipiert, um Netzwerkanwendungen zu entwickeln, die diese nutzen. Es unterstützt Threads für Anwendungsfälle, in denen asynchrone, nicht blockierende E/A nicht möglich sind. Dies basiert auf der Tatsache, dass die meiste Zeit damit verbracht wird, in Netzwerk-E/A-Operationen zu warten. Das zwei Modell, das dies ausnutzt, ist das Threading-Modell, bei dem Sie mehrere Threads erstellen, die jeweils eine einzelne Task oder einen einzelnen Prozess ausführen, der nicht blockierende I/O verwendet, um mehrere Aufgaben in einem einzigen Prozess durch Interleaving mehrerer Tasks auszuführen. Twisted ist sehr gut für das zweite Modell geeignet.

Non-Blocking-Modell

+--------------------------+ 
|task1 | wait period | comp| 
+--------------------------+ 
     +--------------------------+ 
     |task2 | wait period | comp| 
     +--------------------------+ 

Sie können einen sehr robusten Server mit Verdrehte entwickeln und POP3/IMAP-Unterstützung hat.

Es gibt ein Beispiel für die Erstellung pop3 client with twisted.

0

Es ist eine gute Wahl für einen Server, aber nach Ihrer Beschreibung suchen Sie eigentlich nach einem Multithread-POP-Client.

Twisted ist für die Reaktion auf Ereignisse wie eingehende Anfragen gemacht, müssen Sie Anfragen senden, so in diesem Fall fürchte ich verdreht, um von begrenztem Wert zu sein.

+2

Überhaupt nicht. Ein Client und ein Server unterscheiden sich nicht wirklich, wenn es um die Netzwerkebene geht. –

2

In Anbetracht der Tatsache, dass der Großteil Ihrer POP3-Aktivität Netzwerk-I/O sein wird, ist Twisted hier besonders hervorzuheben. Sie tüfteln nicht so sehr wie ereignisbasierte asynchrone Socket-Operationen, was die Krönung von Twisted ist.

Also, ja, Twisted wäre eine gute Wahl für diese Art von Projekt. Es kann Client- und Serveroperationen gleichermaßen gut ausführen, und es ist fast trivial, einen neuen asynchronen TCP-Client hochzufahren, und standardmäßig ist bereits eine POP3 TCP Client verfügbar.

-1

Ein Wort der Vorsicht mit Twisted, während Twisted ist sehr robust Ich habe festgestellt, dass das Spinnen von hundert Threads mit den Codebeispielen in der Dokumentation ist ein Rezept für Race-Bedingungen und Deadlocks. Mein Vorschlag ist Versuch, verdreht, aber das stdlib Multithreading-Modul wartet in den Flügeln, wenn verdreht wird unhandlich. Ich hatte einen guten Erfolg mit einem Produzenten-Konsumentenmodell, das die oben erwähnte Bibliothek verwendet.

+4

Twisted ist nicht mehr und nicht weniger anfällig für Race Conditions beim Einfädeln. Was ist toll an Twisted ist die Fähigkeit, so viele Dinge zu tun * ohne * Threads. Und tatsächlich, Helfer wie twisted.internet.threads.deferToThread nehmen tatsächlich ein kleines bisschen vom Elend aus dem Threading heraus. ;) –

+0

Es ist das Modell, auf das ich hinweise, das ich glaube, es ist leichter zu verstehen, einfacher zu debuggen und hat generell weniger Probleme als verdreht.Ich versuche nicht zu argumentieren, dass eine Bibliothek besser ist als die andere. Ich stimme zu, dass die technischen Vorzüge von Twisted überlegen sind, aber das ist nicht der einzige Grund, ein Framework zu verwenden. – ebt