#!/usr/bin/env python
# -*-coding:utf-8 -*-
'''
生产者消费者模型:
为什么要使用生产者和消费者模式:
在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发中,如果生产者的处理速度很快,
而消费者处理慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同理反过来也不行,因此引进这种模式。
什么是生产消费者模式:
生产者消费模式是通过一个容器来解决生产者和消费者的解耦问题。两者之间不直接通讯,而通过阻塞队列进行通讯,
队列就相当于一个缓冲区,平衡了两者的处理能力。
'''
import time, random
import queue, threading
q = queue.Queue() # 全局q
def Producer(name):
count = 0
while count < 10:
print("making........")
time.sleep(random.randrange(3))
q.put(count)
print('Producer %s has produced %s baozi..' % (name, count))
count += 1
q.task_done() # task_done()给队列发信息,队列操作完成(.put())
# q.join()
print("ok......")
def Consumer(name):
count = 0
while count < 9:
time.sleep(random.randrange(4))
if not q.empty():
# print("waiting.....")
q.join() # 与.task_done()对应
data = q.get()
print("eating....")
# time.sleep(4)
# q.task_done()
# print(data)
print('\033[32;1mConsumer %s has eat %s baozi...\033[0m' % (name, data))
else:
print("-----no baozi anymore----")
count += 1
p1 = threading.Thread(target=Producer, args=('A君',))
c1 = threading.Thread(target=Consumer, args=('B君',))
# c2 = threading.Thread(target=Consumer, args=('C君',))
# c3 = threading.Thread(target=Consumer, args=('D君',))
p1.start()
c1.start()
# c2.start()
# c3.start()