zoukankan      html  css  js  c++  java
  • Python基础---队列

    队列Queue包含三个类 

    1:Queue(maxsize=0)  普通模式先进先出

    2:LifoQueue(maxsize=0)  后进先出

    3:PriorityQueue(maxsize=0)  优先级模式


    Queue.qsize() 返回当前队列里存在的个数

    Queue.empty() 返回队列是否为空

    Queue.full() 返回队列是否存满

    Queue.put(item, block=True, timeout=None)
    将item放入队列中。
    如果可选的参数block为True且timeout为空对象(默认的情况,阻塞调用,无超时)。
    如果timeout是个正整数,阻塞调用进程最多timeout秒,如果一直无空空间可用,抛出Full异常(带超时的阻塞调用)。
    如果block为False,如果有空闲空间可用将数据放入队列,否则立即抛出Full异常

    Queue.put_nowait()无阻塞版本,等同于block=False,timeout=None

    Queue.get(block=True, timeout=None) 取出数据,其他与put类似


    Queue()示例

    import queue
    
    q = queue.Queue()  #普通的(先进先出
    
    q.put(1)
    q.put(2)
    q.put(3)
    
    print(q.qsize()) #获取当前存在的个数
    
    print(q.get()) #取出 当超过的时候会报错
    print(q.get())
    print(q.get())
    结果:

    1 2 3 

    LifoQueue()示例

    import queue
    
    q = queue.LifoQueue()  #普通的(先进先出
    
    q.put(1)
    q.put(2)
    q.put(3)
    
    print(q.qsize()) #获取当前存在的个数
    
    print(q.get()) #取出 当超过的时候会报错
    print(q.get())
    print(q.get())

    结果:

    3  2 1 

    PriorityQueue()示例  

    按照一定的规律确定优先级,例如数字越小优先级越高,或者按字符排序,值得注意的是只能采用一种模式来确定,全为数字或是全为字符,两者不能混在一起,不然会报错。

    import queue
    
    q = queue.PriorityQueue()  #普通的(先进先出
    
    q.put((2,'b'))
    q.put((1,'a'))
    q.put((3,'c'))
    
    print(q.qsize()) #获取当前存在的个数
    
    print(q.get()) #取出 当超过的时候会报错
    print(q.get())
    print(q.get())
    结果:

    (1, 'a')
    (2, 'b')
    (3, 'c')


    简单的生产者和消费者模型

    import queue,threading,time
    q = queue.Queue()
    
    def Producer():
        count = 0
        while True:
            q.put('Switch %s' %count)
            print('Switch %s' %count)
            count += 1
            time.sleep(1)
    
    def Consumer():
        while True:
            if q.qsize() > 0 :
                print('buy %s'%q.get())
                time.sleep(2)
    
    p = threading.Thread(target=Producer)
    c = threading.Thread(target=Consumer)
    
    p.start()
    c.start()
    结果:

    生成了Switch 0
    购买了 Switch 0
    生成了Switch 1
    购买了 Switch 1
    生成了Switch 2
    生成了Switch 3
    购买了 Switch 2
    生成了Switch 4
    生成了Switch 5
    生成了Switch 6
    购买了 Switch 3
    生成了Switch 7
    购买了 Switch 4
    生成了Switch 8


    努力成为一名GEEK!
  • 相关阅读:
    POJ 2794 Exploring Pyramids
    POJ 2282 The Counting Problem
    eclipse中设置java注释模板
    eclipse复制工程需要注意的地方
    extjs的强大利器GUI设计工具(extjs designer)
    eclipse项目名前出现红色感叹号,小红叉解决(转)
    上传一份个人学习struts2的历程笔记
    struts2中的action与actioncontext的理解
    J2EE后台UI系统框架搭建EXTJs使用(4.1 GPL版本)
    java.lang.OutOfMemoryError: Java heap space 解决方法转测试可用
  • 原文地址:https://www.cnblogs.com/FanMLei/p/10501031.html
Copyright © 2011-2022 走看看