python队列

先入先出队列:

import queue

q = queue.Queue(10) # 10为队列长度

for i in range(5):
    q.put(i, block=False)  # block=False为非阻塞,默认为阻塞
    print(q.qsize())    # 队列元素个数

q.put('hehe', timeout=2)    # 超时时间为2秒
print(q.full())     # 判断队列是否满了
print(q.maxsize)    # 队列最大个数

while not q.empty():    # 队列是否为空,不为空就取数据
    print(q.get())      # get时也是默认阻塞的,其他参数与put相同
    q.task_done()       # 阻塞进程,当队列中任务执行完毕后,不再阻塞。表示任务执行完毕

q.join()
先入先出(FIFO)

task_done()意味着之前入队的一个任务已经完成。由队列的消费者线程调用,每一个get()调用得到一个任务,接下来的task_done()调用告诉队列该任务已经执行完毕

如果当前一个join()正在阻塞,它将在队列中的所有任务都处理完时恢复执行(即get后又task_done)

常用方法:

q.qsize() 返回队列的大小
q.empty() 如果队列为空,返回True,反之False
q.full() 如果队列满了,返回True,反之False
q.full 与 maxsize 大小对应
q.get([block[, timeout]]) 获取队列,timeout等待时间
q.get_nowait() 相当q.get(False)
非阻塞 q.put(item) 写入队列,timeout等待时间
q.put_nowait(item) 相当q.put(item, False)
q.task_done() 在完成一项工作之后,q.task_done() 函数向任务已经完成的队列发送一个信号
q.join() 实际上意味着等到队列为空,再执行别的操作

先入后出队列(FILO):

import queue
q = queue.LifoQueue()
for i in range(10):
    q.put(i)

while not q.empty():
    print(q.get())
先入后出

优先级队列:

优先级队列
import queue
q = queue.PriorityQueue()
q.put((1, 'cable'))
q.put((2, 'caocao'))
q.put((3, 'sunquan'))
q.put((2, 'liubei'))        # 优先级相同的时候,先入者为先

while not q.empty():
    print(q.get())
优先级队列

双向队列:

双向队列
import queue
q = queue.deque()
q.append(123)
q.append(456)
q.appendleft('hehe')
print(q.pop())
print(q.popleft())
双向队列
原文地址:https://www.cnblogs.com/caibao666/p/6841492.html