zoukankan      html  css  js  c++  java
  • 生产消费者模型代码示例

    import time
    import random
    from multiprocessing import Process,Queue
    def producer(q,name,food):
        for i in range(4):
            time.sleep(random.random())
            f = "{}生产出一个{}".format(name,food)
            print(f)
            q.put(f)
    def consumer(q,name):
        while True:
            food = q.get()
            if food is None:
                print("{}获取空,退出".format(name))
                break
            time.sleep(random.random())
            print("{}消费了一个{}".format(name,food))
    
    if __name__ == '__main__':
        q = Queue(10)
        p1 = Process(target=producer,args=(q,"生产者1号","包子"))
        p2 = Process(target=producer,args=(q,"生产者2号","馒头"))
        c1 = Process(target=consumer,args=(q,"消费者1号"))
        c2 = Process(target=consumer,args=(q,"消费者2号"))
        c3 = Process(target=consumer,args=(q,"消费者3号"))
        p1.start()
        p2.start()
        c1.start()
        c2.start()
        c3.start()
        p1.join()
        p2.join()
        q.put(None)
        q.put(None)
        q.put(None)
    View Code
    import time
    import random
    from multiprocessing import Process,JoinableQueue
    def producer(q,name,food):
        for i in range(4):
            time.sleep(random.random())
            f = "{}生产出一个{}".format(name,food)
            print(f)
            q.put(f)
        q.join()   #生产周期变长,要等到所生产的数据被处理完,这个子进程才结束
    def consumer(q,name):
        while True:
            food = q.get()
            time.sleep(random.random())
            print("{}消费了一个{}".format(name,food))
            q.task_done()
    
    if __name__ == '__main__':
        q = JoinableQueue(10)
        p1 = Process(target=producer,args=(q,"生产者1号","包子"))
        p2 = Process(target=producer,args=(q,"生产者2号","馒头"))
        c1 = Process(target=consumer,args=(q,"消费者1号"))
        c2 = Process(target=consumer,args=(q,"消费者2号"))
        c3 = Process(target=consumer,args=(q,"消费者3号"))
        p1.start()
        p2.start()
        c1.daemon = True  #设置为守护进程,主进程中的代码执行完毕之后,该守护进程自动结束
        c2.daemon = True
        c3.daemon = True
        c1.start()
        c2.start()
        c3.start()
        p1.join()   #感知一个进程的结束
        p2.join()
    View Code
  • 相关阅读:
    用nodejs的express框架在本机快速搭建一台服务器
    Python版求数组的最大连续区间
    简洁的python测试框架——Croner
    中国有嘻哈——押韵机器人
    服务端测试环境hosts配置检查脚本
    手机客户端软件测试用例设计模板
    【Tomcat】压力测试和优化
    【Tomcat】详解tomcat的连接数与线程池
    【RabbitMQ】2、心得总结,资料汇总
    【高并发解决方案】7、HAProxy安装和配置
  • 原文地址:https://www.cnblogs.com/superniao/p/10123168.html
Copyright © 2011-2022 走看看