2013-08-23 14 views
11

Ich habe festgestellt, dass Gevent threadpool Objekt hat. Kann mir jemand erklären, wann ich threadpool verwenden soll und wann ich den regulären Pool benutzen soll? Was ist der Unterschied zwischen gevent.threadpool und gevent.pool?Wann verwende ich Threadpool in Gevent

Antwort

9

Wenn Sie ein Stück Python-Code haben, der lange dauert (Sekunden) und kein Switchen von Greenlets verursacht. (keine Vernetzung) Alle anderen Greenlets/Gevent-Jobs werden "verhungern" und haben keine Rechenzeit und es sieht so aus, als ob Ihre Anwendung "hängt".

Wenn Sie diese "schwere" Aufgabe in einen Threadpool stellen, stellt die Ausführung mit Threads sicher, dass andere Greenlets nicht verhungern. Aber ich glaube, wenn dein Code viel Zeit in einer c-Bibliothek verbringt, wird das keinen Effekt haben.

unten ist ein Beispiel von gevent examples. Beachten Sie, dass das Beispiel time.sleep verwendet, das blockiert und nicht gevent.sleep.

TIP: Wenn Sie eine Schleife haben, die lange dauert, laufen, als Sie gerade in einem gevent.sleep (0) in der Schleife setzen können. Jede Runde haben andere Greenlets eine Chance zu laufen. Die GEVENT .sleep (0) in Ihrem wird langsam Schleife stellen Sie sicher, andere greenlets wird nicht hungern, und die Anwendungen erscheint reaktions

import time 
import gevent 
from gevent.threadpool import ThreadPool 


pool = ThreadPool(3) 
start = time.time() 
for _ in xrange(4): 
    pool.spawn(time.sleep, 1) 
gevent.wait() 
delay = time.time() - start 
print 'Running "time.sleep(1)" 4 times with 3 threads. Should take about 2 seconds: %.3fs' % delay 
+0

„Aber ich glaube, wenn Ihr Code viel Zeit in ac Bibliothek verbringt wird es haben keine Wirkung "Bist du sicher? Beziehen Sie sich auf C-Erweiterungen oder die 'ctypes'? Denn wenn Sie die GIL freigeben (manuell in einer C-Erweiterung oder automatisch wie 'ctypes'), wird die Anwendung vom ThreadPool profitieren, oder? – MariusSiuram

+0

ja. "Wenn Sie die GIL" genau freigeben. Ich habe keine Zeit, das aus jeder C-Bibliothek herauszufinden ... – Stephan

Verwandte Themen