• Python生产者消费者模型


    生产者消费者模型

    初识生产者消费者

    • 生产者: 生产数据的任务

    • 消费者: 处理数据的任务

    • 生产者--队列(盆)-->消费者

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

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

    • 补充: queue不适合传大文件,通产传一些消息.

    from multiprocessing import Process,Queue
    def god(q,name,food):
        ##生产者要做的事情
        for i in range(1,4):
            print(f'{name}做出了{food}{i}')
            res = f'{food}{i}'
            q.put(res)
        q.put(None)
    def consumer(q,name):
        #消费者要做的事情
        while True:
            res = q.get(timeout= 5 )
            #如果那么#
            if res is None:break
            print(f'{name}吃了{res}')
    
    if __name__ == '__main__':
        q = Queue()
        p1 = Process(target= god , args=(q,'guapi','包子'))
        c1 = Process(target= consumer , args=(q,'小强'))
        p1.start()
        c1.start()
    

    上述代码是解决单个生产者与消费者的问题,问题来了,如果我有多个生产者,多个消费者呢?

    from multiprocessing import Process,Queue
    import time,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)
        # q.put(None)
    
    def consumer(q,name):
        '''消费者'''
        while True:
            res = q.get(timeout=5)
            if res is None:break
            time.sleep(random.randint(1,3))
            print(f'{name}吃了{res}')
    
    if __name__ == '__main__':
        q = Queue()
        p1 = Process(target=producer,args=(q,'rocky','包子'))
        p2 = Process(target=producer,args=(q,'mac','韭菜'))
        p3 = Process(target=producer,args=(q,'nick','蒜泥'))
        c1 = Process(target=consumer,args=(q,'成哥'))
        c2 = Process(target=consumer,args=(q,'浩南哥'))
        p1.start()
        p2.start()
        p3.start()
        c1.start()
        c2.start()
        p1.join()
        p2.join()
        p3.join() # 生产者生产完毕
        q.put(None)# 几个消费者put几次
        q.put(None)
    
  • 相关阅读:
    Shell脚本
    数据结构 栈 java 自带的数据结构
    桃夭
    得道多助,失道寡助
    采薇
    离骚
    两小儿辩日
    鱼我所欲也
    生于忧患,死于安乐
    曹刿论战
  • 原文地址:https://www.cnblogs.com/ledgua/p/11536562.html
Copyright © 2020-2023  润新知