Почему этот код постоянно использует 95% процессора? Производитель не отправляет никаких запросов, но процессор горячий. Как снизить использование процессора, не добавляя явный ненулевой тайм-аут ожидания в зеленую розетку?Gevent queue высокая загрузка процессора
from gevent import queue
from gevent import sleep
from gevent import Greenlet
def cons(q):
while True:
try:
data = q.get_nowait()
except queue.Empty:
sleep(0)
continue
print data
def prod(q):
while True:
#q.put_nowait('hello')
sleep(1)
if __name__ == '__main__':
q = queue.Queue()
cons1 = Greenlet.spawn(cons, q)
prod1 = Greenlet.spawn(prod, q)
cons1.join()
prod1.join()
Это хорошо, но это плохое решение, если у меня есть более одной очереди (например, каналы управления и передачи данных). Я просто добавил sleep (0.00001) в качестве обходного пути - загрузка процессора 3% вместо 96. – echo12345
@ echo12345 Не используйте 'sleep'! Метод 'get' имеет параметр' timeout': 'q.get (timeout = 0.001)'. – Bakuriu
Я уверен, что вы не должны использовать параметры get_nowait() или timeout. Если вы читаете несколько очередей, то просто создайте более одной зелени. В отличие от нитей, зелья дешевы для создания и удаления (в возможно больших количествах). –