Python--Queue

线程队列:

  先入先出队列、后进先出队列、优先级队列

先入先出:

 1 import queue # 导入模块
 2 
 3 q = queue.Queue() # 实例化一个队列
 4 q.put(1) # 向队列中插入数据
 5 q.put(2)
 6 q.put(3)
 7 
 8 while True: # 循环取数据
 9     if q.qsize() != 0: # 当队列大小不为0时则代表队列中有数据
10         print(q.get()) # 获取数据并打印
11     else:
12         break # 当无数据时退出循环

后进先出:

 1 import  queue # 导入模块
 2 
 3 # 后进先出
 4 q = queue.LifoQueue() # last in first out
 5 q.put(1)
 6 q.put(2)
 7 q.put(3)
 8 
 9 print(q.get()) # 直接取数据,当取不到数据时,程序会阻塞
10 print(q.get_nowait())  # # 直接取数据,当取不到数据时,程序会报错:_queue.Empty
11 print(q.get())
12 print(q.get_nowait())

优先级队列:

 1 import  queue
 2 
 3 # 根据消息优先级取数据
 4 q = queue.PriorityQueue() # 实例化优先级队列
 5 q.put((1,'a')) # 向队列中加数据,并设置优先级
 6 q.put((-1,'b'))
 7 q.put((10,'c'))
 8 q.put((3,'z'))
 9 
10 print(q.get_nowait())
11 print(q.get_nowait())
12 print(q.get_nowait())
13 print(q.get_nowait())
14 
15 # -----------------------------
16 (-1, 'b')
17 (1, 'a')
18 (3, 'z')
19 (10, 'c')

设置队列空间大小

 1 import  queue
 2 import time
 3 # 设置队列大小
 4 q = queue.Queue(maxsize=8) # 设置队列最大值为8,队列中最多同时存在8条数据
 5 
 6 for i in range(10):
 7     if i < q.maxsize:
 8         q.put(i)
 9 
10 while q.qsize() != 0:
11     print(q.get())
12     time.sleep(0.5)
13 
14 #-----------------------------
15 0
16 1
17 2
18 3
19 4
20 5
21 6
22 7

生产者消费者模型示例:

 1 import  threading,time,queue
 2 
 3 q = queue.Queue(maxsize=10) # 实例化一个先入先出的队列,并设置队列大小为10
 4 
 5 
 6 def Producter(name):
 7     count = 1
 8     while count <= 20:
 9         q.put("骨头%s" % count)
10         print("%s生产出骨头--%s" % (name,count))
11         count += 1
12 
13 def Consumer(name):
14     while True:
15         if q.qsize() != 0:
16             print("[%s] 取到了骨头[%s]并把它吃了" %(name,q.get()))
17             time.sleep(1)
18         else:
19             print("%s:今天的骨头吃完了,嘤嘤嘤!!!"%name)
20             break
21 
22 yy = threading.Thread(target=Producter,args=('yy',)) #实例化一个生产者线程
23 tj = threading.Thread(target=Consumer,args=('tj',)) #实例化一个消费者线程
24 xl = threading.Thread(target=Consumer,args=('xl',)) #实例化另一个消费者线程
25 yy.start() # 启动生产者线程
26 tj.start() # 启动消费者线程1
27 xl.start() # 启动消费者线程2

 

posted @ 2020-08-19 13:35  NorthFeng  阅读(131)  评论(0编辑  收藏  举报