队列常用方法
Python中的队列是一种数据结构,遵循先进先出(FIFO)的原则。在Python中,你可以使用内置模块queue提供的Queue类来实现队列数据结构。队列是一种常见的数据结构,用于按照特定顺序处理数据项,例如任务调度、数据缓冲、事件处理等。
- qsize():返回队列的大小。
- empty():如果队列为空,返回True,反之False。
- full():如果队列满了,返回True,反之False。Queue.full与maxsize大小对应。
- get([block[, timeout]]):获取队列,timeout等待时间。
- put(item):[block[, timeout]]:写入队列,timeout等待时间。
- task_done():在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号。每个get()调用得到一个任务,接下来task_done()调用告诉队列该任务已经处理完毕。
- join():线程阻塞,直到队列中的所有任务处理完毕。
先进先出队列
import queue
q=queue.Queue(5) #如果不设置,默认无限长
print('队列长度',q.maxsize)
q.put(1,block=True,timeout=1) #block=True表示写入操作是阻塞的,阻塞时间有timeout决定。
#当队列写满的时候,队列会被阻塞,直到其他线程取走数据。block=Flase 非阻塞的
print('队列真实长度',q.qsize())
print(q.get())
#取数据默认是阻塞的
print('队列真实长度',q.qsize())
后进先出队列
import queue
q = queue.LifoQueue()
q.put(12)
q.put(34)
print(q.get())
优先级队列
优先级数越小,则优先级越高
import queue
q = queue.PriorityQueue()
q.put((3,'aaaaa'))
q.put((3,'bbbbb'))
q.put((1,'ccccc'))
q.put((3,'ddddd'))
print(q.get())
print(q.get())
双线队列
import queue
q = queue.deque()
q.append(123)
q.append(456)
q.appendleft(780)
print(q)
print(q.pop())
print(q.popleft())