zoukankan      html  css  js  c++  java
  • 生产消费者作业

    """
    生产者:生产/制造东西的
    消费者:消费/处理东西的
    该模型除了上述两个之外还需要一个媒介
    	生活中的例子做包子的将包子做好后放在蒸笼(媒介)里面,买包子的取蒸笼里面拿
    	厨师做菜做完之后用盘子装着给你消费者端过去
    	生产者和消费者之间不是直接做交互的,而是借助于媒介做交互
    	
    生产者(做包子的) + 消息队列(蒸笼) + 消费者(吃包子的)
    """
    # from multiprocessing import Queue, Process
    from multiprocessing import JoinableQueue, Process
    import random
    import time
    
    
    def producer(name, food, q):
        for num in range(1, 9):
            print('%s 制作 %s 1笼' % (name, food))
            # 模拟网络延迟
            time.sleep(random.randint(1, 2))
            # 将数据加入队列
            q.put(food)
    
    
    def consumer(name, q):
        while True:
            food = q.get() # 假如没有数据,程序就会在此处进入堵塞态
            # 判断当前是否有结束的标识
            # if food is None:break
            time.sleep(random.randint(1, 3))
            print('%s食用了%s' % (name, food))
            q.task_done() # 告诉队列你已经从里面取出了一个数据并且处理完毕了
    
    
    if __name__ == '__main__':
        # q = Queue()
        q = JoinableQueue()
        p1 = Process(target=producer, args=('大厨', '虾饺', q))
        p2 = Process(target=producer, args=('大厨', '蒸饺', q))
        c1 = Process(target=consumer, args=('umi', q))
        p1.start()
        p2.start()
        # 将消费者设置成守护进程
        c1.daemon = True
        c1.start()
    
        p1.join()
        p2.join()
        # 等待生产者生产完毕之后 往队列中添加特定的结束符号
        # q.put(None) # 有多少消费者就往队列中添加多少None,新添加的None必定在队列的末尾
    
        q.join()  # 等待队列中所有的数据被取完再执行往下执行代码
        """
        JoinableQueue 每当你往该队列中存入数据的时候 内部会有一个计数器+1
        没当你调用task_done的时候 计数器-1
        q.join() 当计数器为0的时候 才往后运行
        """
        # 只要q.join执行完毕 说明消费者已经处理完数据了  消费者就没有存在的必要了
    

      

  • 相关阅读:
    UML简介
    Servlet过滤器基础及使用场景
    eclipse maven配置问题:org.apache.maven.archiver.mavenarchiver.getmanifest
    maven中的groupId和artifactId 区分
    Spring中的控制反转和依赖注入
    SQL语句、PL/SQL块和SQL*Plus命令之间的区别
    Mybatis核心类生命周期和管理
    MyBatis Generator 下划线转驼峰命名
    修改maven默认仓库(即repository)的路径
    MyBatis SqlSessionFactory的几种常见创建方式
  • 原文地址:https://www.cnblogs.com/Tornadoes-Destroy-Parking-Lots/p/12763638.html
Copyright © 2011-2022 走看看