我正在尝试在 Gevent 中设置一个简单的生产者-消费者系统,但我的脚本没有退出:
import gevent
from gevent.queue import *
import time
import random
q = Queue()
workers = []
def do_work(wid, value):
"""
Actual blocking function
"""
gevent.sleep(random.randint(0,2))
print 'Task', value, 'done', wid
return
def worker(wid):
"""
Consumer
"""
while True:
item = q.get()
do_work(wid, item)
def producer():
"""
Producer
"""
for i in range(4):
workers.append(gevent.spawn(worker, random.randint(1, 100000)))
for item in range(1, 9):
q.put(item)
producer()
gevent.joinall(workers)
我无法找到关于使用 Gevent 的好的示例/教程,所以我在上面粘贴的内容是我从互联网上拼凑出来的。
多个工作人员被激活,项目进入队列,但即使队列中的所有内容都完成,主程序也不会退出。我必须按CTRL ^ C
。
我究竟做错了什么?
谢谢。
附带说明:如果我的脚本有什么可以改进的地方,请告诉我。简单的事情,例如检查队列何时为空等。