三种队列和队列的方法

  • python 中Queue 模块提供了,线程安全的队列类,包括FIFO(先进先出) LIFO(后入先出)LifoQueue,优先级队列PriorityQueue,这些队列实现了锁,能够在多线程操作中直接使用,可以用来实现线程间的同步
  • 初始化Queue()对象时,如果括号中没有指定最大可接受消息数,或者数量为负值,代表队列没有上限

from queue import Queue,LifoQueue,PriorityQueue
#初始化并创建队列
cq = Queue()  #先入先出
lq = LifoQueue() #后入先出
pQ = PriorityQueue() #优先级队列

  • 队列中的方法:
  1. put(item, block=True, timeout=None) 向队列中添加数据 timeout 设置等待时间,block=True 表示队列满时等待,block=False 表示不等待与put_nowait()一致
  2. get() 从队列中获取数据
  3. put_nowait() 向队列中添加数据不等待(队列满了报错)
  4. get_nowait() 从队列中获取数据不等待(队列为空报错)
  5. full() 判断队列是否已满
  6. 判断队列是否为空
  7. 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))       
   
效果1.png

队列为空等待

                                                    
#队列中的参数                                             
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))            

效果2.png

设备等待时间和不等待

#队列中的参数                                                   
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())         
                          
效果3.png

判断任务是否执行完成

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

区别从后面取值


image.png

优先级队列PriorityQueue

pQ = PriorityQueue(
pQ.put((1,11))      #
pQ.put((2,10))     传入元祖,第一个是优先级第二个数据
pQ.put((2,9))   
print(pQ.get()) 
print(pQ.get())  #统一优先级按照数据大小从小到大

你可能感兴趣的:(三种队列和队列的方法)