python 生产者 和消费者

文件效率低和加锁处理

队列和管道用的都是内存的空间 ,一块共享内存

队列就是管道加锁

队列是多个进程通信使用的,一个进程可以把数据放到队列里面 ,另外进程可以从队列取走数据

最大的好处程序的解耦,附加的好处平衡了生产者和消费者的速度差

引入队列来解决他们的耦合度
生产者 <—> 队列 <—> 消费者

如果真的用了Queue来创造生产者和消费者,依偎着生产者和消费者和Queue必须在同一台机器上

以后的队列用 rabbitmq或者activemq

有几个消费者 ,来几个信号
在这里插入图片描述

from multiprocessing import Process,Lock,Queue
import time

#生产
#生产者在最后一次给我发个信号,保证消费者把正常的数据取走了,这个信号说明生产完了
def producer(q):
    for i in range(5):
        res = "包子%s" %i
        time.sleep(0.5)
        print('生产者生产了%s' %res)

        q.put(res)

#消费
def consumer(q):
    while True:
        res = q.get()
        if res is None:break
        time.sleep(1)
        print('消费者吃了%s' % res)

if __name__ == '__main__':
    #容器  队列
    q = Queue()

    #生产者们
    p1 = Process(target=producer, args=(q,))
    #p2 = Process(target=producer, args=(q,))
    #p3 = Process(target=producer, args=(q,))

    #消费者门
    c1 = Process(target=consumer, args=(q,))
    #c2 = Process(target=consumer, args=(q,))

    p1.start()
    #p2.start()
    #p3.start()

    c1.start()
    #c2.start()
    #保证主进程的p1的子进程都已经运行完了,生产者把10个数据全都丢进去了 在写p1.join()
    p1.join()
    #p2.join()
    #p3.join()

    #跟到正常数据的后面  有几个消费者就来几个信号
    q.put(None)
    #q.put(None)
    print('主')

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟伟哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值