2012-08-03 17 views
5

Rozumiem, że po wywołaniu gevent.monkey.patch_all(), standardowy moduł wątków jest modyfikowany, aby używać zielonych zamiast wątków Pythona. Więc jeśli piszę swoją aplikację w kategoriach wątków Pythona, zamków, semaforów itp., A następnie wywołuję patch_all, czy dostaję pełną korzyść z geventu, czy też tracę na czymś w porównaniu z użyciem jawnych odpowiedników gevent?Minusem korzystania z łatanych wątków w porównaniu do rodzimych zielonych roślinek?

Motywacją tego pytania jest to, że piszę moduł, który używa wątków/greenletów, i decyduję, czy użyteczne jest wyraźne przełączenie między używaniem geowag a używaniem wątków, czy mogę po prostu użyć wątku + patch_all bez utraty czegokolwiek.

Aby umieścić go w kodzie, jest to ...

def myfunction(): 
    print 'ohai' 

Greenlet.spawn(myfunction) 

... jakikolwiek inny do tego?

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

mythread().start() 

Odpowiedz

2

Przynajmniej twoja wola stracić niektóre z metod Greenlet specyficzne: łącza, zabić, dołącz itp Również nie można używać wątki, na przykład, moduł gevent.pool, które mogą być bardzo przydatne. I jest bardzo mało narzutów do tworzenia obiektu Thread.