首页 > 代码库 > python队列

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())
双向队列

 

python队列