python__queue队列的使用
(1)queue队列的排序的三种方式
class queue.Queue(maxsize=0) #先入先出
class queue.LifoQueue(maxsize=0) #先进后出
class queue.PriorityQueue(maxsize=0) #存储数据时可设置优先级的队列
1:先进先出原则
import queue
#先进先出
queue1 = queue.Queue()
queue1.put(1)
queue1.put(2)
queue1.put(3)
print(queue1.get())
print(queue1.get())
print(queue1.get())
由上图可以看出,分别存入三个数,1,2,3,取数据的时候是按照先进先出的原则,最先取出1,然后是2,最后是3.
2:先进后出原则
import queue
queue2 = queue.LifoQueue()
queue2.put(1)
queue2.put(2)
queue2.put(3)
print(queue2.get())
print(queue2.get())
print(queue2.get())
由上图可以看出,分别存入三个数,1,2,3,取数据的时候是按照先进先后出的原则,最先取出3,然后是2,最后是1.
3:优先级原则
import queue
queue3 = queue.PriorityQueue()
queue3.put((10,"jaj"))
queue3.put((2,"jac"))
queue3.put((3,"jav"))
queue3.put((1,"jab"))
print(queue3.get())
print(queue3.get())
print(queue3.get())
print(queue3.get())
由上图可以看出,分别存入三四个数据,取数据的时候是按照优先级的先后顺序来实现的。
实战演练
使用生产者消费者模型来实现queue队列的使用,Queue模块实现了所有要求的锁机制。 其实就是Queue模块主要是多线程,保证线程安全使用的。
生产者代码
q = queue.Queue(maxsize=10)
def Produce(peoduce):
count = 1
while True:
q.put(count)
count+=1
print("生产了第%s个%s" % (count, peoduce))
if count>=30:
break
消费者代码
def Consder(name):
while True:
time.sleep(1)
print("%s吃了第%s"%(name,q.get()))
主代码快
p = threading.Thread(target=Produce,args=("baozhi",))
c = threading.Thread(target=Consder,args=("jack",))
c1 = threading.Thread(target=Consder,args=("tom",))
p.start()
c.start()
c1.start()
生产者生产包子,生产出包子以提供消费者(jack和tom消费),当包子的数量最大限制为10个(queue.Queue(maxsize=10)),当jack和tom在吃包子的时候,多于的包子放在queue队列中,当jack或者tom吃完手中的包子的时候,会去queue队列中取包子继续吃,生产者是一直提供包子,当包子到达10个的时候(queue队列最大的数量)就等待消费者的去队列中取包子,当queue队列中的数量少于10个的时候继续生产。