zoukankan      html  css  js  c++  java
  • queue队列

    python2.x  Queue   python3.x  queue

    作用:1、提高效率;2、完成程序的解耦。

    队列可以理解为一个有序的容器,但跟列表不同的是,队列里的数据取出来就没有了。

    class queue.Queue(maxsize=0)    先入先出

    class queue.LifoQueue(maxsize=0)  后入先出(last in first out)

    class queue.PriorityQueue(maxsize=0)  存储数据时可以设置优先级的队列

    Queue.put(item, block=True, timeout=None)   往队列里放数据(block表示如果满了是否等待取出)

    Queue.get(block=True, timeout=None)   往队列里取数据(如果队列里没有数据就一直等待,因为block默认为True表示阻塞,timeout可以设置等待时间)

    Queue.get_nowait()   往队列里取数据(不等待,如果没有数据就抛出异常)

    Queue.qsize()   队列大小

    Queue.empty()    是否为空

    Queue.full()  是否满了

    Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号

    Queue.join() 实际上意味着等到队列为空,再执行别的操作

    加入队列时设置优先级的例子(按元组的第一个元素升序排列)

    import Queue
    
    q = Queue.PriorityQueue()
    
    q.put((6, 'vivi'))
    q.put((1, 'Allen'))
    q.put((3, 'Jackson'))
    
    print q.get()
    print q.get()
    print q.get()

    输出:
    (1, 'Allen')
    (3, 'Jackson')
    (6, 'vivi')

    生产者消费者模型

    #coding=utf-8
    
    import threading
    import Queue
    import time
    
    q = Queue.Queue(maxsize=10)
    
    def writer():
        index = 1
        while True:
            print u'辉哥写出了bug{}'.format(index)
            q.put('bug{}'.format(index))
            time.sleep(1)
            index += 1
    
    def tester():
        while True:
            print u'华哥测出了{}'.format(q.get())
            time.sleep(0.5)
    
    wt = threading.Thread(target=writer)
    tt = threading.Thread(target=tester)
    
    wt.start()
    tt.start()
    
    运行结果:
    
    辉哥写出了bug1
    华哥测出了bug1
    辉哥写出了bug2
    华哥测出了bug2
    辉哥写出了bug3
    华哥测出了bug3
    辉哥写出了bug4
    华哥测出了bug4
    辉哥写出了bug5
    华哥测出了bug5
    辉哥写出了bug6
    华哥测出了bug6
    ...
  • 相关阅读:
    HTML 页面的 批量删除的按钮
    HTML 选择器
    ....
    java 反射机制
    插件库
    向上滚动
    浮动元素定位float
    中文字体对应的英文名称
    echarts入门教程
    ie9浏览器window.openbug
  • 原文地址:https://www.cnblogs.com/allenzhang-920/p/10205428.html
Copyright © 2011-2022 走看看