zoukankan      html  css  js  c++  java
  • 队列和生产者消费者模型

    队列

    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()
    
  • 相关阅读:
    501. 二叉搜索树中的众数
    530. 二叉搜索树的最小绝对差
    Java强制类型转换注意
    PL_SQL常用快捷键及设置
    Java线程:大总结
    Java多线程售票程序分析
    Java多线程的几种实现方式
    Java线程的几种状态
    Java的同步机制:synchronized关键字
    Eclipse常用设置[不断完善]
  • 原文地址:https://www.cnblogs.com/yunluo/p/11568310.html
Copyright © 2011-2022 走看看