队列和生产者消费者模型

队列

IPC机制:进程通讯

管道:pipe,基于共享的内存空间

队列:pipe+锁

from multiprocessing import Queue

q = Queue()
q.put(3)   # 放值
q.get()   # 拿值

队列不适合传大文件,通常传一些消息

生产者消费者模型

生产者:生产数据的任务

消费者:处理数据的任务

生产者--->队列--->消费者

生产者可以不停的生产,达到了自己最大的生产效率;消费者可以不停的消费,达到了自己最大的消费效率。

生产者消费者模型大大提高了生产者生产的效率和消费者消费的效率。

from multiprocessing import Process,JoinableQueue
import time
import random

def producer(q, name, food):
    for i in range(3):
        print(f'{name}生产了{food}{i}')
        time.sleep(random.randint(1, 3))
        res = f'{food}{i}'
        q.put(res)
        
def consumer(q, name):
    while True:
        res = q.get()
        time.sleep(random.randint(1, 3))
        print(f'{name}吃了{res}')
        q.task_done()
        
if __name__ == '__main__':
    q = JoinableQueue()
    p1 = Process(target=producer, args=(q, 'xiaowu', '肉包'))
    p2 = Process(target=producer, args=(q, 'liyi', '豆沙包'))
    p3 = Process(target=producer, args=(q, 'guapi', '菜包'))
    c1 = Process(target=consumer, args=(q, '张三'))
    c2 = Process(target=consumer, args=(q, '李四'))
    p1.start()
    p2.start()
    p3.start()
    c1.daemon = True
    c2.daemon = True
    c1.start()
    c2.start()
    p1.join()
    p2.join()
    p3.join()
    q.join()

转载于:https://www.cnblogs.com/yunluo/p/11568310.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值