python 生产者消费者模型 multiprocessing Process Queue 队列

from multiprocessing import Queue, Process


def consumer(q, name):  # 消费者
    while 1:
        info = q.get()  # 阻塞等待获取数据,如果有数据直接获取,如果没有数据阻塞等待
        if info:  # 收到None作为结束标识
            print(' %s 得到 %s' % (name, info))
        else:  # 当消费者获得队列中数据时,如果获得的是None,就是获得到了生产者不再生产数据的标识
            break  # 此时消费者结束


def producer(q, product):  # 生产者
    for i in range(20):
        info = product + '的产品%s号' % str(i)
        q.put(info)  # 阻塞,如果可以继续往队列中放数据,就直接放,不能放就阻塞等待


if __name__ == '__main__':
    q = Queue(10)  # 队列的最大长度
    p_pro1 = Process(target=producer, args=(q, '美国产'))  # 生产者
    p_pro2 = Process(target=producer, args=(q, '英国产'))
    p_pro3 = Process(target=producer, args=(q, '日本产'))

    p_con1 = Process(target=consumer, args=(q, '消费者01'))  # 消费者
    p_con2 = Process(target=consumer, args=(q, '消费者02'))

    p_l = [p_con1, p_con2, p_pro1, p_pro2, p_pro3]
    [i.start() for i in p_l]  # 开启多进程

    p_pro1.join()
    p_pro2.join()
    p_pro3.join()
    q.put(None)  # 几个消费者就接受几个结束标识 None作为结束标识
    q.put(None)

q.get()  # 阻塞等待获取数据,如果有数据直接获取,如果没有数据,阻塞等待
q.put()  # 阻塞,如果可以继续往队列中放数据,就直接放,不能放就阻塞等待

q.get_nowait()  # 不阻塞,如果有数据直接获取,没有数据就报错
q.put_nowait()  # 不阻塞,如果可以继续往队列中放数据,就直接放,不能放就报错
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

徐奥雯XUAOWEN

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

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

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

打赏作者

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

抵扣说明:

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

余额充值