zoukankan      html  css  js  c++  java
  • 基于队列实现生产者消费者模型

    code
    from multiprocessing import Process,Queue
    import time,random,os
     
    def consumer(q,p1):
        while True:
            res=q.get()
            if(res=="finish"):
                break
            time.sleep(random.randint(1,3))
            print('%s 吃 %s' %(os.getpid(),res))
     
    def producer(q):
        for i in range(10):
            time.sleep(random.randint(1,3))
            res='包子%s' %i
            q.put(res)
            print('生产了 %s' %(str(os.getpid())+res))
     
    if __name__ == '__main__':
        q=Queue()
        #生产者们:即厨师们
        q.put("tea")
     
        p1=Process(target=producer,args=(q,))
        #消费者们:即吃货们
        c1=Process(target=consumer,args=(q,p1),)
     
        #开始
        p1.start()
        c1.start()
     
        p1.join()
        q.put("finish")
        print('')
    Outputs
    macname@MacdeMacBook-Pro py % python3 cccccc.py
    58397 吃 tea
    生产了 58396包子0
    58397 吃 包子0
    生产了 58396包子1
    58397 吃 包子1
    生产了 58396包子2
    58397 吃 包子2
    生产了 58396包子3
    58397 吃 包子3
    生产了 58396包子4
    58397 吃 包子4
    生产了 58396包子5
    58397 吃 包子5
    生产了 58396包子6
    生产了 58396包子7
    58397 吃 包子6
    生产了 58396包子8
    58397 吃 包子7
    58397 吃 包子8
    生产了 58396包子9
    主
    58397 吃 包子9
    macname@MacdeMacBook-Pro py %
     
    可自动退出版本

    Code
    from multiprocessing import Process,Queue
    import time,random,os
    def consumer(q):
        while True:
            res=q.get()
            if res is None:break #收到结束信号则结束
            time.sleep(random.randint(1,3))
            print('%s 吃 %s' %(os.getpid(),res))
     
    def producer(q):
        for i in range(10):
            time.sleep(random.randint(1,3))
            res='包子%s' %i
            q.put(res)
            print('%s生产了 %s' %(os.getpid(),res))
        q.put(None) #发送结束信号
    if __name__ == '__main__':
        q=Queue()
        #生产者们:即厨师们
        p1=Process(target=producer,args=(q,))
     
        #消费者们:即吃货们
        c1=Process(target=consumer,args=(q,))
     
        #开始
        p1.start()
        c1.start()
        print('')
    Outputs
    macname@MacdeMacBook-Pro py % python3 cccccc.py
    主
    58417生产了 包子0
    58418 吃 包子0
    58417生产了 包子1
    58418 吃 包子1
    58417生产了 包子2
    58418 吃 包子2
    58417生产了 包子3
    58417生产了 包子4
    58418 吃 包子3
    58417生产了 包子5
    58418 吃 包子4
    58417生产了 包子6
    58417生产了 包子7
    58418 吃 包子5
    58417生产了 包子8
    58418 吃 包子6
    58418 吃 包子7
    58418 吃 包子8
    58417生产了 包子9
    58418 吃 包子9
    macname@MacdeMacBook-Pro py %

    主进程在生产者生产完毕后发送结束信号None

    code
    from multiprocessing import Process,Queue
    import time,random,os
    def consumer(q):
        while True:
            res=q.get()
            if res is None:break #收到结束信号则结束
            time.sleep(random.randint(1,3))
            print('%s 吃 %s' %(os.getpid(),res))
     
    def producer(q):
        for i in range(2):
            time.sleep(random.randint(1,3))
            res='包子%s' %i
            q.put(res)
            print('%s生产了 %s' %(os.getpid(),res))
     
    if __name__ == '__main__':
        q=Queue()
        #生产者们:即厨师们
        p1=Process(target=producer,args=(q,))
     
        #消费者们:即吃货们
        c1=Process(target=consumer,args=(q,))
     
        #开始
        p1.start()
        c1.start()
     
        p1.join()
        q.put(None) #发送结束信号
        print('')
    Outputs
    macname@MacdeMacBook-Pro py % python3 cccccc.py
    58426生产了 包子0
    58426生产了 包子1
    58427 吃 包子0
    主
    58427 吃 包子1
    macname@MacdeMacBook-Pro py %
     
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    927小程序繁星计划峰会 · 看完这七大话题 你会更了解阿里小程序
    不吹不黑,今天我们来聊一聊 Kubernetes 落地的三种方式
    虽然他们说是水题,但我觉得思想蛮好的
    新学dfs(看懂了)
    01背包,死记硬背(我是真的蠢)
    装箱问题(太笨、还没想通)
    高精度乘法,string中的坑
    双十一用python秒杀京东好货!
    高精度减法用string 和 stack
    n阶汉诺塔 记住吧。。
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14193161.html
Copyright © 2011-2022 走看看