为什么这段代码会永久使用95%的CPU?Producer不发送任何请求,但cpu很热。如何在消费者greenlet中不添加显式的非零睡眠超时来降低cpu使用率?在
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()
在第8行中,使用get()而不是get\u nowait()
超级简单,现在你的消费者将阻止,而等待更多的工作。在
所有推荐的最佳解决方案: 使用队列.get为每个队列在单独的greenlet内阻塞调用。在
下一部分代码轮询2gevent.queue队列+zmq绿色greenlet中的套接字在greenlet中=) CPU负载接近零!在
谢谢你的建议!在
相关问题 更多 >
编程相关推荐