2012-08-03 9 views
5

Mein Verständnis ist, dass, sobald ich gevent.monkey.patch_all() aufgerufen habe, das Standard-Threading-Modul geändert wurde, um Greenlets anstelle von Python-Threads zu verwenden. Wenn ich also meine Anwendung in Form von Python-Threads, Sperren, Semaphoren usw. schreibe und dann patch_all aufruft, bekomme ich dann den vollen Nutzen von gevent, oder verliere ich etwas im Vergleich zu den expliziten gevent-Äquivalenten? Die Motivation hinter dieser Frage ist, dass ich ein Modul schreibe, das einige Threads/Greenlets verwendet, und ich entscheide, ob es sinnvoll ist, zwischen gevent und threading zu wechseln, oder ob ich Threading einfach verwenden kann + patch_all ohne etwas zu verlieren.Nachteil der Verwendung von Patched Threading vs native Gevent Greenlets?

Um es in Code zu setzen, ist dies ...

def myfunction(): 
    print 'ohai' 

Greenlet.spawn(myfunction) 

... anders dazu?

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

mythread().start() 

Antwort

2

Mindestens Ihr werden einige greenlet spezifische Methoden lösen: link, töten, kommen usw. Sie können auch keine Threads mit, zum Beispiel, gevent.pool Modul, die sehr nützlich sein kann. Und es gibt einen sehr geringen Aufwand für das Erstellen von Thread-Objekt.