zoukankan      html  css  js  c++  java
  • 生产者、消费者、队列

    '''
    queue队列,什么是队列?排队干一件事,谁去维护排队的关系?预防插队等
    队列是一个有顺序的容器,有列表了还要队列干什么。
    根本区别是列表里拿走一个数据,数据还在里面。队列是数据取走了就没了
    为什么要用队列?提高双方效率,解耦合,生产者向队列里放,(队列),消费者从队列里取
    1、先入先出 queue.Queue(maxsize=0)
    queue.put()放数据
        (如果放满了再放就会阻塞,用queue.put(block=False)或q.put_nowait()抛异常,或者判断队列长度,为max就不取)
    queue.get()取数据
        (如果取完了再取就会阻塞,用queue.get(block=False)或q.get_nowait()抛异常,或者判断队列长度,为0就不取)
    queue.qsize()大小
    queue.full()大小限制
    2、后进先出queue.LifoQueue(maxsize=0)
    3、存储数据时设置优先级queue.ProrityQueue(maxsize=0)
        放数据的时候排序了,queue.put((1,"alex"))改变元祖里的数字可以改顺序
    '''
    '''
    生产者消费者模型:利用队列,生产者和消费者通过队列关联。例如web负载均衡
    
    '''
    import queue
    import threading
    import time
    
    q = queue.Queue(maxsize=10)
    
    def Producer(name):
        # 不停的向队列里生产骨头,当然可以有多个生产者
        count = 1
        while True:
            q.put("骨头{0}".format(count))
            print("生产了{0}个骨头".format(count))
            count += 1
            time.sleep(1)
    
    def Consumer(name):
        # 不停的从队列里取骨头,当然可以有多个消费者
        while True:
            print("{0}取到{1}并且吃了它".format(name, q.get()))
            time.sleep(0.5)
    
    p = threading.Thread(target=Producer, args=("alex",))
    c1 = threading.Thread(target=Consumer, args=("张三",))
    c2 = threading.Thread(target=Consumer, args=("李四",))
    
    
    p.start()
    c1.start()
    c2.start()
  • 相关阅读:
    Android查看应用方法数
    解决问题 inner element must either be a resource reference or empty.
    Android JSBridge原理与实现
    CDN详解
    Android studio 将 Module 打包成 Jar 包
    Imageloader、Glide、Fresco的性能及加载速度比较
    Mac之如何查看已用端口
    yum安装docker-ce-18.03.0
    脚本检测Kafka和Zookeeper
    Docker搭建ElasticSearch+Redis+Logstash+Filebeat日志分析系统
  • 原文地址:https://www.cnblogs.com/staff/p/9691647.html
Copyright © 2011-2022 走看看