队列在线程间通信_生产者消费者模式

本文详细介绍了队列在生产者消费者模式中的作用,通过平衡生产线程和消费线程的工作能力来提高程序整体处理数据的速度。文章提供了Python代码示例,展示了如何使用队列实现线程间的通信。

队列在线程间通信通常应用于生产者和消费者模式:

生产者:产生数据的模块

消费者:处理数据的模块

在生产者与消费者之间的缓冲区称为仓库,生产者往仓库运送商品,消费者从仓库取出商品,这就构成了生产者消费者模式。

生产者消费者模式就是用来处理并发的,该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。

该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。

生产者消费者理解资料:  

https://blog.youkuaiyun.com/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--------------')


结果如下:两个线程是同时进行的

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值