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 %
     
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    107. Binary Tree Level Order Traversal II
    108. Convert Sorted Array to Binary Search Tree
    111. Minimum Depth of Binary Tree
    49. Group Anagrams
    使用MALTAB标定实践记录
    442. Find All Duplicates in an Array
    522. Longest Uncommon Subsequence II
    354. Russian Doll Envelopes
    opencv 小任务3 灰度直方图
    opencv 小任务2 灰度
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14193161.html
Copyright © 2011-2022 走看看