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 %
     
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    IBM Thread and Monitor Dump Analyzer for Java解决生产环境中的性能问题
    ORACLE中的字符串替换 replce、regexp_replace 和 translate
    ORA-01654 索引 无法通过 表空间扩展
    HTML篇之CSS样式:<button></button>按钮变成超链接<a></a>的样式
    HTML里用如何包含引用另一个html文件 .
    java程序中实现打开 某个指定浏览器
    Oracle查询数据库中所有表的记录数
    getOutputStream() has already been called for this response解释以及解决方法
    oracle索引,索引的建立、修改、删除
    各种组件的js 获取值 / js动态赋值
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14193161.html
Copyright © 2011-2022 走看看