Я пытаюсь настроить простую систему производитель-потребитель в 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
.
Что я делаю не так?
Спасибо.
На заметку: если что-то может быть улучшено моим сценарием, пожалуйста, дайте мне знать. Простые вещи, такие как проверка, когда очередь пуста и т. Д.