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
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
- 1. Wann verwende ich xdata?
- 2. Wann verwende ich parseInt?
- 3. Wann verwende ich CFRelease?
- 4. Wann verwende ich Fixed Point?
- 5. Wann verwende ich std :: random_device?
- 6. Wann verwende ich Akka Microkernel?
- 7. Twisted, gevent eventlet - Wann würde ich sie verwenden?
- 8. Wann verwende ich OPTIMIZE in mysql
- 9. Wann verwende ich Parser-Generator, wann ist Regex genug?
- 10. Wann verwende ich Java und Message Broker?
- 11. Wann verwende ich NSInteger vs. int
- 12. Wann/Wo verwende ich verschachtelte Ressourcen?
- 13. Wann verwende ich eine Abfrage oder Code
- 14. Wann verwende ich HtmlControls vs WebControls
- 15. Wann sollte der Threadpool mit der festgelegten Größe verwendet werden?
- 16. Wann verwende ich save !, create! und update_attributes! in Schienen?
- 17. Wann verwende ich statische Variablen/Funktionen in PHP?
- 18. Wie gevent in Produktion läuft
- 19. Generic ThreadPool in. NET
- 20. Deadlock in ThreadPool
- 21. extjs 4.1 Wann verwende ich einen Proxy in einem Geschäft und wann auf einem Modell?
- 22. Threadpool Design Frage
- 23. Wann und wie verwende ich Enumerationsklassen statt Enums?
- 24. Wann verwende ich "__attribute __ ((nichtnull))" vs "not_null <T*>"?
- 25. C# - ThreadPool QueueUserWorkItem Verwenden?
- 26. Wann verwende ich das TestFixtureSetUp-Attribut anstelle eines Standardkonstruktors?
- 27. gevent urllib ist langsam
- 28. Wie bekomme ich gevent-py2.7-win64.egg
- 29. Threadpool-/Warteschlangengrößenbeschränkung ungelöst
- 30. Verzeichniszugriff mit Threadpool (.NET, IIS6)
„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
ja. "Wenn Sie die GIL" genau freigeben. Ich habe keine Zeit, das aus jeder C-Bibliothek herauszufinden ... – Stephan