# 生产包子和消费包子模型,一对多 线程(threading),队列(queue) 先入先出FIFO # 线程之间不直接通信(queue阻塞,缓冲区) # 队列方法 # Queue.Queue(maxsize=0) # FIFO, 如果maxsize小于1就表示队列长度无限 # Queue.LifoQueue(maxsize=0) # LIFO, 如果maxsize小于1就表示队列长度无限 先入后出 # Queue.qsize() # 返回队列的大小 # Queue.empty() # 如果队列为空,返回True, 反之False # Queue.full() # 如果队列满了,返回True, 反之False # Queue.get([block[, timeout]]) 读队列,timeout等待时间 # Queue.put(item, [block[, timeout]]) 写队列,timeout等待时间 # Queue.queue.clear() 清空队列 import queue, threading, random, time q = queue.Queue(maxsize=10) # 限制最大生产数 FIFO def sheng(): count = 0 while True: # 死循环生产者一直生产 time.sleep(1) q.put(count) # 放入队列 print("生产第{0}个包子".format(count)) if q.full(): # 判断队列是否溢出 print("队列满了") # q.join() # 阻塞 当加了队列溢出,队列将一直处于阻塞状态,将不会生产 count += 1 def xiao(name): count = 0 while True: time.sleep(1) if not q.empty(): # 判断队列是否为空 data = q.get() # 队列内取数据 # q.task_done() # q.join() print(data) print('