Zauważyłem, że Gevent ma obiekt threadpool. Czy ktoś może mi wytłumaczyć, kiedy używać wątku i kiedy używać puli regularnej? Jaka jest różnica między gevent.threadpool i gevent.pool?Kiedy używać Threadpool w Gevent
Odpowiedz
Kiedy masz kawałek kodu Pythona, którego wykonanie zajmuje dużo czasu (kilka sekund) i nie spowoduje to zamiany zielonych obiektów. (brak sieci) Wszystkie inne zadania typu greenlet/gevent będą "głodować" i nie będą miały czasu obliczeń, a będzie wyglądać, że aplikacja "zawiesza się".
Jeśli umieścisz to "ciężkie" zadanie w wątku, wykonanie gwintu sprawi, że inne zielone środowisko nie będzie głodzone. Ale wierzę, że jeśli twój kod spędza dużo czasu w bibliotece c, nie będzie to miało żadnego efektu.
poniżej to przykład z gevent examples. Zauważ, że w przykładzie użyto time.sleep, który blokuje, a nie gevent.sleep.
TIP: Jeśli masz pętlę, która zajmuje dużo czasu, aby uruchomić niż można po prostu umieścić w gevent.sleep (0) w pętli. Każda pętla inne greenlety będą miały szansę uruchomić. gevent .sleep (0) w swoim powolnym pętli zadba inne greenlets nie będą głodować i aplikacje pojawia reaguje
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. Czy można bezpiecznie używać SQLalchemy z gevent?
- 2. Kiedy używać viewDidLoad i kiedy używać awakeFromNib
- 3. Kiedy używać node.js i kiedy używać ajax?
- 4. kiedy używać zadania i kiedy używać wątku?
- 5. Threadpool w kontekście IIS
- 6. Kiedy używać dup i kiedy używać klonu w Ruby?
- 7. Maksymalna liczba wątków ThreadPool
- 8. ThreadPool procesów CLI
- 9. Asynchronizuj/czekaj, ThreadPool and SetApartmentState
- 10. Generic ThreadPool in .NET
- 11. Kiedy używać interfejsów w PHP
- 12. Kiedy używać asObservable() w rxjs?
- 13. Kiedy używać OPTIMIZE w mysql
- 14. kiedy używać hijack w golangu?
- 15. Kiedy używać "tego" w Javie
- 16. Kiedy używać „ja” w Ruby
- 17. kiedy używać void * w C++
- 18. Kiedy używać assert() w Matlabie?
- 19. Kiedy używać parlist w R?
- 20. Czy dopuszczalne jest używanie ThreadPool w bibliotece?
- 21. Kiedy używać Formatera wartości i kiedy używać Resolvera wartości
- 22. Kiedy używać Requirejs i kiedy używać dołączonego javascript?
- 23. Kiedy należy używać JCR i kiedy należy używać JPA/RDBMS?
- 24. Kiedy używać klienta boto3 i kiedy używać zasobu Boto3?
- 25. Kiedy używać komponentów Seaside i kiedy używać prostych obiektów renderowania?
- 26. Kiedy używać algorytmów genetycznych a kiedy używać sieci neuronowych?
- 27. Konwencja dotycząca celu C: kiedy używać i kiedy używać z
- 28. Kiedy używać JMS i kiedy używać usługi REST?
- 29. PHP: Kiedy używać funkcji i kiedy używać metod statycznych?
- 30. Sposób korzystania z klasy ThreadPool
„Ale wierzę, jeśli kod spędza dużo czasu w bibliotece ac będzie miał brak efektu "jesteś pewien? Czy odnosisz się do rozszerzeń C lub "ctypes"? Ponieważ jeśli zwolnisz GIL (ręcznie w rozszerzeniu C lub automatycznie jako 'ctypes'), to aplikacja skorzysta z ThreadPool, prawda? – MariusSiuram
tak. "jeśli zwolnisz GIL" dokładnie. Nie mam czasu, aby to wymyślić z każdej biblioteki C ... – Stephan