2009-09-02 18 views
6

Sto tentando di utilizzare Twisted in una sorta di programma di spidering che gestisce più connessioni client. Mi piacerebbe mantenere un pool di circa 5 clienti che lavorano contemporaneamente. La funzionalità di ciascun client è quella di connettersi a un server IRC specificato che ottiene da un elenco, immettere un canale specifico e quindi salvare l'elenco degli utenti in quel canale in un database.Gestione di più connessioni client Twisted

Il problema che sto avendo è più architettonico di qualsiasi altra cosa. Sono abbastanza nuovo per Twisted e non so quali opzioni sono disponibili per la gestione di più client. Sto assumendo che il modo più semplice sia quello di far morire ogni istanza di ClientCreator una volta che ha completato il suo lavoro e avere un ciclo centrale che può controllare se c'è spazio per aggiungere un nuovo client. Penserei che questo non sia un problema particolarmente insolito, quindi spero di raccogliere alcune informazioni dalle esperienze di altre persone.

risposta

4

L'opzione migliore è davvero solo per fare la cosa ovvia qui. Non avere un ciclo o una chiamata a tempo ripetuto; hai solo gestori che fanno la cosa giusta.

Mantiene un oggetto centrale di gestione delle connessioni e fa in modo che i metodi di gestione degli eventi forniscano le informazioni necessarie per continuare. Quando inizia, crea 5 connessioni in uscita. Tieni traccia di quanti sono in corso, mantieni un elenco con loro. Quando una connessione riesce (in connectionMade) aggiorna l'elenco per ricordare il nuovo stato della connessione. Al termine di una connessione (in connectionLost) indicare al gestore connessione; la sua risposta dovrebbe essere quella di rimuovere quella connessione e creare una nuova connessione da qualche altra parte. Nel mezzo, dovrebbe essere abbastanza ovvio come attivare una richiesta per i nomi necessari e inserirli in un database (in attesa che l'inserimento del database venga completato prima di abbandonare la connessione IRC, molto probabilmente, aspettando che lo Deferred venga ritorno da adbapi).

3

Dal momento che ognuno dei client deve aggiornare un database, penso che sarei in grado di estrapolare lo connection pool - vedere here per ulteriori informazioni (l'intero documento è consigliato per alcuni modelli di progettazione importanti che emergono spesso quando si utilizza il twistato).

-1

Non so se si è costretti a utilizzare Twisted, altrimenti si potrebbe desiderare di provare Gevent.