2012-08-03 7 views
5

La mia comprensione è che una volta chiamato gevent.monkey.patch_all(), il modulo di threading standard viene modificato per utilizzare i greenlet anziché i thread python. Quindi se scrivo la mia applicazione in termini di thread, lock, semafori, ecc. E poi chiami patch_all, sto ottenendo il massimo beneficio da gevent, o sto perdendo qualcosa rispetto all'utilizzo degli equivalenti espliciti di gevent?Lato negativo dell'uso di threading con patch rispetto a gevent greenlet nativi?

La motivazione alla base di questa domanda è che sto scrivendo un modulo che utilizza alcuni thread/greenlet e sto decidendo se è utile avere un passaggio esplicito tra l'utilizzo di gevent e l'utilizzo del threading o se posso semplicemente utilizzare il threading + patch_all senza perdere nulla.

Per mettere in codice, è questo ...

def myfunction(): 
    print 'ohai' 

Greenlet.spawn(myfunction) 

... diverso a questo?

import gevent.monkey 
gevent.monkey.patch_all() 
def mythread(threading.Thread): 
    def run(self): 
    print 'ohai' 

mythread().start() 

risposta

2

Almeno il tuo perderanno alcuni dei metodi specifici Greenlet: Link, uccidere, unirvi ecc Inoltre non è possibile utilizzare le discussioni con, ad esempio, il modulo gevent.pool, che può essere molto utile. E c'è un piccolo sovraccarico per la creazione dell'oggetto Thread.

Problemi correlati