2010-09-02 13 views
6

Ho bisogno di prelevare da centinaia di account di posta elettronica pop3 e voglio creare un server robusto per farlo.Potrebbe essere una buona scelta per la creazione di un server multi-threaded?

Sarebbe una buona scelta per questo tipo di progetto?

In questo momento un semplice prototipo sarebbe quello di eseguire il pull da un singolo account pop3, quindi estrarrebbe da molti ma sarebbe un processo serializzato.

Voglio creare un server che ha più thread in modo che possa fare le cose allo stesso tempo.

risposta

7

Twisted è un framework di rete basato su eventi scritto in Python. Sviluppa pesantemente su funzionalità asincrone e non bloccanti ed è meglio concepito per sviluppare applicazioni di rete che li utilizzano. Ha il supporto per i thread per casi d'uso in cui non è possibile fornire I/O asincroni non bloccanti. Questo si basa sul fatto che la maggior parte del tempo viene speso in attesa nelle operazioni di I/O di rete.

Il modello che sfrutta questo è il modello di threading in cui si creano più thread, ognuno dei quali esegue una singola attività o un singolo processo che utilizza I/O non bloccanti per eseguire più attività in un singolo processo interlacciando più attività. Twisted è molto adatto per il secondo modello.

non-Blocking modello

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

È possibile sviluppare un server molto robusto con Twisted ed ha il supporto POP3/IMAP.

C'è un esempio di come creare pop3 client with twisted.

0

È una buona scelta per un server ma dalla tua descrizione stai cercando acutamente un client POP con multithreading.

Twisted è fatto per reagire a eventi come le richieste in entrata, è necessario inviare richieste, quindi in questo caso temo che il twistato abbia un valore limitato.

+2

Niente affatto. Un client e un server non sono poi così diversi quando si tratta del livello di rete. –

2

Considerando che la maggior parte dell'attività POP3 sarà l'I/O di rete, è qui che Twisted eccelle. Non si sta veramente facendo il thread tanto quanto eseguendo operazioni asincrone basate sugli eventi, che è il coronamento di Twisted.

Quindi, sì, Twisted sarebbe una buona scelta per questo tipo di progetto. Può fare altrettanto bene operazioni client e server ed è quasi banale girare su un nuovo client TCP asincrono e ha già un POP3 TCP Client disponibile per impostazione predefinita.

-1

Una parola di cautela con twistato, mentre twistato è molto robusto Ho scoperto che girare un centinaio di thread usando gli esempi di codice disponibili nella documentazione è una ricetta per condizioni di gara e deadlock. Il mio suggerimento è provare twistato ma avere il modulo multithreading stdlib in attesa sulle ali se twistato diventa ingestibile. Ho avuto un buon successo con un modello di consumatore produttore utilizzando la libreria di cui sopra.

+4

Twisted non è né più né meno incline alle condizioni di gara quando il threading è coinvolto. La cosa fantastica di Twisted è la capacità di fare tante cose * senza * thread. E in realtà, aiutanti come twisted.internet.threads.deferToThread in realtà eliminano un po 'la miseria dal threading. ;) –

+0

È il modello che sto indicando che penso sia più facile da capire, più facile da eseguire il debug e in genere ha meno problemi di quelli contorti.Non sto cercando di dimostrare che una libreria è migliore dell'altra. Concordo sul fatto che i meriti tecnici di twisted sono superiori, ma questo non è l'unico motivo per utilizzare un framework. – ebt

Problemi correlati