<p>要完成使用者线程,可以将sentinel值推送到队列中,如下所示:</p>
<pre><code>from queue import Queue
import threading
import time
class producer(threading.Thread):
def __init__(self, list_of_numbers):
threading.Thread.__init__(self)
self.list_items = list_of_numbers
def run(self):
for i in self.list_items:
queue.put(str(i))
print("Producer Finished")
class consumer(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
done = False
while not done:
queue_ret = queue.get()
if queue_ret is None:
done = True
else:
print("Retrieved", queue_ret)
queue.task_done()
print("Consumer Finished")
queue = Queue()
producers = [producer([10,20,5,4,3,2,1])]
consumers = [consumer()]
for producer in producers:
producer.start()
for consumer in consumers:
consumer.start()
for producer in producers:
producer.join()
for consumer in consumers:
queue.put(None)
for consumer in consumers:
consumer.join()
print("Finished")
</code></pre>