一、LILO
先进先出,只能在尾部插入元素,只能从头部取出元素
from queue import Queue
q = Queue() # 创建队列对象
q.put(1) # 队列尾部插入元素
q.put(2)
q.put(3)
print(q.queue) # 查看队列中的所有元素
a = q.get() # 返回并删除队列头部元素
print(a)
print(q.queue) # 运行结果deque([2,3])
二、LIFO
先进后出,类似栈
from queue import LifoQueue
lifoQueue = LifoQueue() # 创建对象
lifoQueue.put(1)
lifoQueue.put(2)
lifoQueue.put(3)
print(lifoQueue.queue)
lifoQueue.get() # 返回并删除队列尾部元素
print(lifoQueue.queue) # 运行结果[1,2]
三、优先队列
队列元素为元组类型,即(优先级,数据)。
from queue import PrioritQueue as pq
pq = pq() # 创建有限队列
pq.put(1)
pq.put(4)
pq.put(3)
print(pq.queue) # 运行结果[1,3,4]
pq.get() # 返回并删除优先级最低的元素
print(pq.queue) # 运行结果[3,4]
四、双端队列
>>> from collections import deque #双端队列
>>> dequeQueue = deque(['Eric','John','Smith'])
>>> print(dequeQueue)
deque(['Eric', 'John', 'Smith'])
>>> dequeQueue.append('Tom') #在右侧插入新元素
>>> dequeQueue.appendleft('Terry') #在左侧插入新元素
>>> print(dequeQueue)
deque(['Terry', 'Eric', 'John', 'Smith', 'Tom'])
>>> dequeQueue.rotate(2) #循环右移2次
>>> print('循环右移2次后的队列',dequeQueue)
循环右移2次后的队列 deque(['Smith', 'Tom', 'Terry', 'Eric', 'John'])
>>> dequeQueue.popleft() #返回并删除队列最左端元素
'Smith'
>>> print('删除最左端元素后的队列:',dequeQueue)
删除最左端元素后的队列: deque(['Tom', 'Terry', 'Eric', 'John'])
>>> dequeQueue.pop() #返回并删除队列最右端元素
'John'
>>> print('删除最右端元素后的队列:',dequeQueue)
删除最右端元素后的队列: deque(['Tom', 'Terry', 'Eric'])
五、常用方法
task_done()
意味着之前入队的任务完成,由消费者线程调用。get()调用得到任务后,task_done()调用告诉队列任务处理完毕
join()
线程阻塞,直到队列中的所有任务处理完毕
put(item[, block[, timeout]])
将item放入队列
1.timeout为正整数时,等待超时则抛出Full异常
3.block为False时,有空间可将数据放入队列,立即抛出Full异常
get()
从队列中移除并返回数据
empty()
队列为空时返回True