2010-06-04 4 views
7

Continuo a sentire tutto questo hype su Twisted per Python, ma trovo semplicemente confuso. Cosa pensi sia più semplice da usare? Prese semplici o implementazione attorcigliata?È contorto niente di buono?

+0

Semplici prese? Implementazione distorta. –

risposta

26

io sto da quello che ho scritto nel Python in a Nutshell (2a edizione p 540.):

ritorto include potenti, di alto livello componenti come i server web, utenti sistemi di autenticazione, server di posta e clienti , instant messaging, SSH client e server, un server DNS e il client e così via, nonché l'infrastruttura di livello inferiore su cui tutti questi componenti di alto livello sono stati creati . Ogni componente è altamente scalabile e facilmente personalizzabile, e sono tutti integrati per interoperare senza problemi con lo . È un tributo alla potenza di Python e all'ingegno degli sviluppatori di Twisted che così tanto può fare del valore di due megabyte di di download.

Chiedersi se questo quadro incredibilmente ricco e potente è "più semplice da usare" a "semplici prese" è un po 'come chiedere se una macchina è "più semplice da usare" di una vite: che strano domanda !

Le auto sono costruite con viti (tra le altre cose) e non possono essere abbastanza "semplici da usare" - solo perché una vite fa così poco, un'auto fa così tanto.

Ma se si desidera passare da A a B (e possibilmente trasportare passeggeri, bagagli, animali domestici, ...) una vite non sarà di grande aiuto (a meno che non si stia praticamente costruendo una macchina da zero;).

Ovviamente le macchine non sono l'unico modo per passare da A a B, proprio come non è l'unico modo per creare sistemi network-centric in Python. Un cavallo e un buggy (come asyncore) è caratteristico e divertente, anche se meno pratico; un treno ad alta velocità (come tornado) può essere più facile da usare e almeno altrettanto veloce, anche se molto meno flessibile; e per vari scopi specializzati puoi preferire tutti i tipi di altri mezzi di trasporto, dai monocicli alle navi da crociera (come, in Python e per il networking, tutti i tipi di altri pacchetti, da paramiko a dnspython) - tutti includeranno viti come parte di i loro componenti (come, tutti includeranno socket come parte del modo in cui sono costruiti), nessuno sarà facile da usare come "socket semplici", ognuno (nella sua gamma di applicabilità) farà molto più per te che "semplici prese" potrebbero possibilmente.

Twisted è una scelta eccellente in un vasto numero di casi, spesso il migliore quando è necessario integrare più aspetti della funzionalità e/o implementare alcuni protocolli per i quali non esiste una soluzione completamente pacchettizzata. Le "prese semplici" non lo sono: sono solo un componente di basso livello da cui sono state create funzionalità di livello superiore e quelle di livello superiore e raramente c'è una buona ragione (tranne l'apprendimento, ovviamente) per "eseguire il rollover "componenti di livello superiore costruiti" da zero "sopra le prese (piuttosto che scegliere quelli esistenti potenti e ben costruiti) - proprio come raramente si è giustificati nel costruire il proprio computer da transistor, resistori, condensatori, ecc. piuttosto che scegliere circuiti integrati appropriati ;-).

+0

Beh, voglio solo imparare. Questo è il motivo per cui ho chiesto: b Voglio imparare a costruire la macchina! : P – Jake

+1

spero che ci sia un "Twisted in poche parole". Adoro il libro "Python in poche parole" e "Python Cookbook". Non riesco ancora a scrivere codice con competenza con twistedmatrix, finendo di leggere l'attuale libro di Twisted e il documento Twisted ... – sunqiang

+0

@Jake, imparare a costruire automobili è un grande sforzo. Sfortunatamente non esiste un vero libro di testo per questo (non uno basato su Python, almeno), ma puoi progredire gradualmente attraverso lo studio di socket, TCP/IP, protocolli di livello superiore su di essi, implementazione di alcuni protocolli nello standard di Python libreria (plain vanilla, no multitasking), quindi threading vs sistemi asincroni, asyncore, twistato (in ogni caso, mescolando "come lo uso per l'attività X" con "come viene implementato internamente e perché hanno scelto questa decisione progettuale"). Lungo viaggio davvero, ma, grande apprendimento avanti! -) –

4

Twisted è un framework di concorrenza. Ti consente di destreggiarsi tra più attività in un'unica applicazione senza utilizzare thread/processi. Lo fa utilizzando un sistema asincrono basato su eventi ed è particolarmente utile con le applicazioni di rete. Il codice asincrono tende generalmente ad essere un po '"diverso" dalle cose normali poiché il flusso non è esplicito e le cose accadono sulla base di eventi esterni. Questo può essere fonte di confusione ma funziona. Twisted è probabilmente la più matura libreria di concurrioni asincrone di Python, quindi se è quello che hai intenzione di fare, twisted è una buona cosa su cui scommettere.

"Le prese semplici" come le mettete sono primitive di comunicazione e non proprio paragonabili a twistate. Cosa stai cercando di fare?

0

Twisted è stato rilasciato per la prima volta nel 2002 e da allora ha subito un enorme aumento; (questo è un argomento delicato e molte persone sostengono che questo è buono e necessario in un quadro) - Tuttavia per qualcuno che si avvicina al progetto ora può essere un po 'scoraggiante. Ci sono tuttavia opzioni se stai spingendo verso framework asincroni. Ho trovato questo blog interessante: http://nichol.as/asynchronous-servers-in-python. Benchmark a parte, i campioni di codice da soli sono piuttosto interessanti da confrontare.

+3

contorto è pesante, sono d'accordo ma non gonfio. E 'una sensazione molto liberatoria quando stai cercando qualcosa e lo trovi all'interno di un twist: già implementato, testato e pronto all'uso. –