• 生产者消费者模型


    '''
    1. 什么是生产者消费者模型
        生产者:代指生产数据的任务
        消费者:代指处理数据的任务
        该模型的工作方式:
            生产生产数据传递消费者处理
    
            实现方式:
                生产者---->队列<------消费者
    
    2. 为何要用
        当程序中出现明细的两类任务,一类负责生产数据,一类负责处理数据
        就可以引入生产者消费者模型来实现生产者与消费者的解耦合,平衡生产能力与消费能力,从提升效率
    
    3. 如何用
    '''
    
    '''
    import time,random
    from multiprocessing import Process,Queue
    
    def producer(name,food,q):
        for i in range(3):
            res='%s%s' %(food,i)
            time.sleep(random.randint(1,3)) #模拟生产数据的时间
            q.put(res)
            print('厨师[%s]生产了<%s>' %(name,res))
    
    def consumer(name,q):
        while True:
            res=q.get()
            if res is None:break
            time.sleep(random.randint(1,3)) #模拟处理数据的时间
            print('吃货[%s]吃了<%s>' %(name,res))
    
    if __name__ == '__main__':
        q=Queue()
        # 生产者们
        p1=Process(target=producer,args=('小Egon','煎饼',q))
        p2=Process(target=producer,args=('中Egon','肉夹馍',q))
        p3=Process(target=producer,args=('大Egon','腰子汤',q))
        # 消费者们
        c1=Process(target=consumer,args=('alex',q))
        c2=Process(target=consumer,args=('java',q))
    
        p1.start()
        p2.start()
        p3.start()
        c1.start()
        c2.start()
    
        p1.join()
        p2.join()
        p3.join()
        q.put(None)
        q.put(None)
        print('主')
    '''
    
    
    import time,random
    from multiprocessing import Process,JoinableQueue
    
    def producer(name,food,q):
        for i in range(3):
            res='%s%s' %(food,i)
            time.sleep(random.randint(1,3)) #模拟生产数据的时间
            q.put(res)
            print('厨师[%s]生产了<%s>' %(name,res))
    
    def consumer(name,q):
        while True:
            res=q.get()
            time.sleep(random.randint(1,3)) #模拟处理数据的时间
            print('吃货[%s]吃了<%s>' %(name,res))
            q.task_done()
    
    if __name__ == '__main__':
        q=JoinableQueue()
        # 生产者们
        p1=Process(target=producer,args=('小Egon','凉皮',q))
        p2=Process(target=producer,args=('中Egon','生煎',q))
        p3=Process(target=producer,args=('大Egon','胡辣汤',q))
        # 消费者们
        c1=Process(target=consumer,args=('tom',q))
        c2=Process(target=consumer,args=('python',q))
        c1.daemon=True
        c2.daemon=True
    
        p1.start()
        p2.start()
        p3.start()
        c1.start()
        c2.start()
    
        p1.join()
        p2.join()
        p3.join()
        q.join() # 主进程等q结束,即q内数据被取干净了
        print('')
  • 相关阅读:
    [React Testing] Create a Custom Render Function to Simplify Tests of Redux Components
    [React Testing] Test a Custom React Hook with React’s Act Utility and a Test Component
    Android之Android apk动态加载机制的研究
    Android之设备唯一识别
    ios之调用打电话,发短信,打开网址
    ios之如何读取plist
    android之卸载反馈的功能
    Android之针对webview的缓存
    Android之仿String的对象驻留
    Mac与Mac之中的共享方式
  • 原文地址:https://www.cnblogs.com/xuqidong/p/13648836.html
Copyright © 2020-2023  润新知