队列在线程间通信通常应用于生产者和消费者模式:
生产者:产生数据的模块
消费者:处理数据的模块
在生产者与消费者之间的缓冲区称为仓库,生产者往仓库运送商品,消费者从仓库取出商品,这就构成了生产者消费者模式。
生产者消费者模式就是用来处理并发的,该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。
该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。
生产者消费者理解资料:
https://blog.csdn.net/u011109589/article/details/80519863
http://ifeve.com/producers-and-consumers-mode/
应用场景资料:
https://www.cnblogs.com/blogXy/p/7755946.html
一个例子如下:
# _*_ coding: UTF-8 _*_
from queue import Queue
import random,threading,time
# 生产者
class Producer(threading.Thread):
def __init__(self,name,queue):
threading.Thread.__init__(self, name=name)
self.data = queue
def run(self):
for i in range(5):
print('生产者%s将产品%d加入队列' % (self.getName(), i))
self.data.put(i) # 数据放入队列
time.sleep(random.random())
print('生产者%s完成' % self.getName())
# 消费者
class Consumer(threading.Thread):
def __init__(self,name,queue):
threading.Thread.__init__(self, name=name)
self.data = queue
def run(self):
for i in range(5):
val = self.data.get()
print('消费者%s将产品%d从队列中取出'% (self.getName(), val))
time.sleep(random.random()) # 生成0和1之间的随机浮点数float
print('消费者%s完成' % self.getName())
if __name__ == "__main__":
print('------主线程开始-------')
queue = Queue()
producer = Producer('Producer',queue)
consumer = Consumer('Consumer',queue)
#print(random.random())
producer.start() # 实例化生产者线程
consumer.start() # 实例化消费者线程
producer.join()
consumer.join()
print('-----over--------------')
结果如下:两个线程是同时进行的