python学习--queue 队列

Posted Ian_Learning

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习--queue 队列相关的知识,希望对你有一定的参考价值。

 

队列queue:

作用:程序之间解耦;提高运行效率

class queue.Queue(maxsize=0) #先入先出
class queue.LifoQueue(maxsize=0) #last in fisrt out 
class queue.PriorityQueue(maxsize=0) #存储数据时可设置优先级的队列
Queue.qsize()
Queue.empty() #return True if empty  
Queue.full() # return True if full 
Queue.put(itemblock=Truetimeout=None)
Queue.put_nowait(item)  #不等待,直接回复错误结果,避免卡死
Queue.get(block=Truetimeout=None) #等待的时间只有timeout 秒
Queue.get_nowait()

 

 

 1 import queue
 2 
 3 q = queue.Queue() #先入先出
 4 
 5 q.put("d1")
 6 q.put("d2")
 7 q.put("d3")
 8 print(q.qsize())
 9 print(q.get()) #取数据,按顺序取
10 print(q.get())
11 print(q.get())
12 
13 #q.get_nowait()  #不等待,直接回复错误结果,避免卡死
14 #q.get(timeout=1)  #等待的时间只有1s
15 #q.get()  #不能再取了,因为里面没有了,会卡死。
16 
17 q = queue.LifoQueue(3) #后入先出
18 
19 q.put("d1")
20 q.put("d2")
21 q.put("d3")
22 print(q.qsize())
23 print(q.full())  #判断是否队列存储满,返回布尔值
24 print(q.empty())  #判断是否队列是否为空,返回布尔值
25 print(q.get()) #取数据,按反序取
26 print(q.get())
27 print(q.get())
28 
29 
30 q = queue.PriorityQueue(3) #优先级输出
31 
32 q.put((10,"d1"))
33 q.put((11,"d2"))
34 q.put((1,"d3"))
35 print(q.qsize())
36 print(q.full())  #判断是否队列存储满,返回布尔值
37 print(q.empty())  #判断是否队列是否为空,返回布尔值
38 print(q.get()) #取数据,按照优先级取,从小到大
39 print(q.get())
40 print(q.get())

 

 

集群的基础:

经典的生产者消费者模型

 1 import threading,time
 2 
 3 import queue
 4 
 5 q = queue.Queue(maxsize=10)
 6 
 7 
 8 def Producer(name):
 9     count = 1
10     while True:
11         q.put("%s 牌骨头%s" % (name, count))
12         print("%s 生产了骨头 %s " % (name, count))
13         count += 1
14         time.sleep(0.1)
15 
16 
17 def Consumer(name):
18     #while q.qsize()>0:
19     while True:
20         print("[%s] 取到[%s] 并且吃了它..." % (name, q.get()))
21         time.sleep(1)
22 
23 
24 p = threading.Thread(target=Producer,args=("big dog",))
25 c = threading.Thread(target=Consumer,args=("jojo",))
26 c1 = threading.Thread(target=Consumer,args=("cj",))
27 
28 p.start()
29 c.start()
30 c1.start()

 

以上是关于python学习--queue 队列的主要内容,如果未能解决你的问题,请参考以下文章

python 归纳 _并发队列Queue的使用

Python 线程队列 Queue – FIFO

python 3.x 学习笔记16 (队列queue 以及 multiprocessing模块)

python学习四十天(进程池)

python学习笔记-(十五)RabbitMQ队列

Python实战之双向队列deque/queue学习笔记及简单练习