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())

双向队列

上一篇:Hibernate--使用xml配置映射关系


下一篇:UVALive 6906 Cluster Analysis 并查集