2010-06-15 11 views
36

Utilizziamo Twisted in modo estensivo per le applicazioni che richiedono una grande quantità di io asincrono. Ci sono alcuni casi in cui roba è invece legata alla cpu e per questo generiamo un pool di processi per fare il lavoro e avere un sistema per gestirli su più server, tutto fatto in Twisted. Funziona alla grande. Il problema è che è difficile avvicinare i nuovi membri del team. La scrittura di codice asincrono in Twisted richiede una curva di apprendimento quasi verticale. È come se gli umani non pensassero in quel modo naturalmente.Eventlet o gevent o Stackless + Twisted, Pylons, Django e SQL Alchemy

Stiamo considerando un approccio misto forse. Forse mantenere la parte del server xmlrpc e la gestione dei processi in Twisted e implementare le altre cose nel codice che almeno sembra sincrono in una certa misura pur non essendo tale. Poi di nuovo mi piace l'esplicito oltre implicito, quindi devo pensarci un po 'di più. Comunque su greenlets: quanto funziona bene quella roba? Quindi c'è Stackless e, come potete vedere dal mio avatar di Gallentean, sono perfettamente consapevole dell'enorme successo che ha avuto nel suo utilizzo per il gioco EVE Online di prima classe di CCP. Che mi dici di Eventlet o di gevent? Bene per ora solo Eventlet funziona con Twisted. Comunque gevent afferma di essere più veloce in quanto non è una pura implementazione in Python, ma piuttosto si basa su libevent. Inoltre afferma di avere meno idiosincrasie e difetti. gevent È gestito da 1 ragazzo per quanto posso dire. Questo mi rende un po 'diffidente, ma tutti i grandi progetti iniziano così così ... Poi c'è PyPy - Non ho ancora finito di leggerlo ancora - l'ho visto in questa discussione: Drawbacks of Stackless.

Così confuso - mi chiedo cosa diavolo fare - sembra che Eventlet sia probabilmente la migliore scommessa, ma è davvero abbastanza stabile? Qualcuno là fuori ha qualche esperienza con esso? Dovremmo andare con Stackless invece come è stato intorno e la tecnologia è provata - proprio come Twisted è pure - e lavorano insieme bene. Ma odio ancora dover avere una versione separata di Python per farlo. cosa fare ....

Questo blog un po 'odioso mi ha colpito per la testa: Asynchronous IO for Grownups Non capisco perché Twisted è come un commento Java per me Java è in genere dove ci si trova mentalità di threading ma qualunque cosa. Tuttavia, se quella cosa della patch della scimmia funziona davvero così, allora wow. Solo wow!

+0

Puoi commentare ulteriormente cosa intendi per MySQL non essere buono per OLTP? –

+0

L'ho tolto perché non era rilevante per il resto dell'articolo. Ma ciò che lo rende povero è il supporto abissale per le visualizzazioni, i trigger lenti e le stored procedure, un ottimizzatore di query piuttosto primitivo e difficile da decifrare/informazioni insufficienti per i piani di query (non sono disponibili piani per gli aggiornamenti/eliminazioni/inserimenti). Richiede indici su tutte le colonne di chiavi esterne che spesso generano così tanti indici inutili che si finisce semplicemente per non implementare affatto chiavi esterne per evitare un grave peggioramento delle prestazioni. Potrei andare avanti e avanti ... – Khorkrak

+0

Twisted è una delle * più famose librerie Python. In che modo passare a progetti più oscuri può aiutare chiunque a "mettersi al lavoro" più velocemente? –

risposta

28

Si potrebbe voler controllare:

Eventlet e gevent non sono realmente paragonabili a Stackless, perché le navi stackless con una libreria standard che non è a conoscenza di tasklets. Esistono implementazioni di socket for Stackless ma non c'è nulla di così completo come gevent.monkey. CCP non usa le bareless Stackless, ha qualcosa chiamato Stackless I/O che AFAIK è solo per Windows e non è mai stato open source (?).

Sia eventlet che gevent possono essere eseguiti su Stackless anziché su Greenlet. Ad un certo punto abbiamo persino provato a farlo come GSoC project ma non ho trovato uno studente.

+0

Grazie mille Denis - Avevo già letto il confronto di gevent con l'eventlet ma i report degli utenti che passavano da twisted o eventlet a gevent erano illuminanti. – Khorkrak

+1

@Khorkrak È passato un anno e mezzo da quando hai fatto questa domanda. Mi chiedevo se potessi condividere la tua esperienza da allora. Cosa hai finito? Come ha funzionato per te? –

+0

Il confronto è distorto. Eventlet ha molti miglioramenti da quel momento e ora ha un supporto maggiore. –

4

Rispondendo a una parte della tua domanda - se guardi allo http://speed.pypy.org vedrai che l'uso di twistato su PyPy potrebbe dare un po 'di velocità a. Questo dipende ovviamente dal carico di lavoro, ma probabilmente vale la pena di provarlo.

Cheers,
fijal

+1

L'uso di PyPy ti dà un enorme aumento di velocità, quindi vale la pena considerare. C'è anche [Tornado] (http://tornadoweb.org/) che è più semplice, molto più veloce che ritorto, funziona più stabile con un carico elevato. –

0

Ho costruito una piccola applicazione web in tempo reale sulla parte superiore del eventlet e Repoze.bfg (ho rinunciato a django un po 'di tempo fa). Ho trovato che eventlet e patch per scimmia sono semplici come dice Ted.

0

Gevent non è puro Python e dipende strettamente da CPython. Dai framework Web che hai citato Eventlet (OpenStack) e Tornado (FriendsFeed, Quora) ha la distribuzione più grande.