- python 中Queue 模块提供了,线程安全的队列类,包括FIFO(先进先出) LIFO(后入先出)LifoQueue,优先级队列PriorityQueue,这些队列实现了锁,能够在多线程操作中直接使用,可以用来实现线程间的同步
- 初始化Queue()对象时,如果括号中没有指定最大可接受消息数,或者数量为负值,代表队列没有上限
from queue import Queue,LifoQueue,PriorityQueue
#初始化并创建队列
cq = Queue() #先入先出
lq = LifoQueue() #后入先出
pQ = PriorityQueue() #优先级队列
- 队列中的方法:
- put(item, block=True, timeout=None) 向队列中添加数据 timeout 设置等待时间,block=True 表示队列满时等待,block=False 表示不等待与put_nowait()一致
- get() 从队列中获取数据
- put_nowait() 向队列中添加数据不等待(队列满了报错)
- get_nowait() 从队列中获取数据不等待(队列为空报错)
- full() 判断队列是否已满
- 判断队列是否为空
- join()等待队列中所有任务执行完成
8.task_done : 提示任务执行完毕
队列满了等待
#队列满了等待:
#队列中的参数
from queue import Queue,LifoQueue,PriorityQueue
cq = Queue(5) # 设备队列为5
for i in range(6):
cq.put(i)
print('_________{}______'.format(i))
队列为空等待
#队列中的参数
from queue import Queue,LifoQueue,PriorityQueue
cq = Queue(5) # 设备队列为5
for i in range(5):
cq.put(i)
for i in range(6):
cq.get() #当队列为空是停止在这里
print('_________{}______'.format(i))
设备等待时间和不等待
#队列中的参数
from queue import Queue,LifoQueue,PriorityQueue
cq = Queue(5) # 设备队列为5
for i in range(6):
cq.put(i,timeout=3) #设置等待时间
for i in range(6):
cq.get(block=False) #设备为不等待
print('_________{}______'.format(i))
判断队列是否已满和已空,获取当前队列中有多少个元素
# 队列中的参数
from queue import Queue
cq = Queue(5) # 设备队列为5
for i in range(5):
cq.put(i, timeout=3)
#获取当前队列中有多少个元素
print(cq.qsize())
# 判断队列是否已满 ,已满返回True
print(cq.full())
for i in range(5):
cq.get(block=False)
# 判断队列是否为空 ,已空返回True
print(cq.empty())
判断任务是否执行完成
from queue import Queue, LifoQueue, PriorityQueue
cq = Queue(5) # 设备队列为5
for i in range(5):
cq.put(i, timeout=3)
#获取当前队列中有多少个元素
print(cq.qsize())
# 判断队列是否已满
print(cq.full())
for i in range(5):
cq.get(block=False)
cq.task_done() #告诉队列执行完成
cq.join() #等待队列执行完成
# 判断队列是否为空
print(cq.empty())
LIFO(后入先出)LifoQueue
区别从后面取值
优先级队列PriorityQueue
pQ = PriorityQueue(
pQ.put((1,11)) #
pQ.put((2,10)) 传入元祖,第一个是优先级第二个数据
pQ.put((2,9))
print(pQ.get())
print(pQ.get()) #统一优先级按照数据大小从小到大