python基础 — Queue 队列

queue介绍

queue是python中的标准库,俗称队列。

在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换的时候,队列就出现了,队列可以完美解决线程间的数据交换,保证线程间数据的安全性和一致性。

注意: 在python2.x中,模块名为Queue   python3.x 为 queue

 

queue模块有三种队列及构造函数:

Python queue模块的FIFO队列 先进先出。 queue.Queue(maxsize)

LIFO类似于堆,即先进后出。 queue.LifoQueue(maxsize)

还有一种是优先级队列级别越低越先出来。 queue.PriorityQueue(maxsize)

 

queue模块中的常用方法

queue.get([block[, timeout]])获取队列,立即取出一个元素, timeout超时时间

queue.put(item[, timeout]]) 写入队列,立即放入一个元素, timeout超时时间

queue.join() 阻塞调用线程,直到队列中的所有任务被处理掉, 实际上意味着等到队列为空,再执行别的操作

queue.get_nowait() 相当于queue.get(False)

queue.put_nowait(item) 相当于queue.put(item, False)

queue.qsize() 返回队列的大小

queue.empty() 如果队列为空,返回True,反之False

queue.full() 如果队列满了,返回True,反之False

queue.full 与 maxsize 大小对应

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

 

基本使用例子:

import queue

q = queue.Queue(2)
q.put('a')
q.put('b')
print(q.full())       # True
print(q.qsize())      # 2
print(q.queue[0])       # 获取队列的第1位元素 : a
print(q.queue)          # 打印队列内容 : deque(['a','b'])
print(q.get())        # a
print(q.get())        # b
print(q.empty())     # True

 

 

 

创建队列priority 优先级模式  用的不多

put的时候输入优先级级别和数据

import queue

q = queue.PriorityQueue()
q.put([1, "hello"])
q.put([3,"la"])
q.put([2,"Niu"])
q.put([1,"world"])
while not q.empty():
    print(q.get())

'''  输出
[1, 'hello']
[1, 'world']
[2, 'Niu']
[3, 'la']
''

 

 

队列的原理:

class queue(object):
    """队列"""
    def __init__(self):
        self.__list=[]
    def enqueue(self,item):
        """入队"""
        self.__list.append(item)
    def dequeue(self):
        """出队"""
        return self.__list.pop(0)
    def is_empty(self):
        """判断是否为空"""
        return self.__list==[]
    def size(self):
        """判断大小"""
        return len(self.__list)
if __name__=="__main__":
    s=queue()
    s.enqueue(1)
    s.enqueue(2)
    s.enqueue(3)
    s.enqueue(4)
    print(s.dequeue())
    print(s.size())
    print(s.dequeue())
    print(s.dequeue())
    print(s.dequeue())
    print(s.is_empty())

 

  

 

posted @ 2019-12-06 11:43  FishMan552  阅读(3119)  评论(0)    收藏  举报