python__queue队列的使用

本文介绍了Python queue模块的三种队列类型:FIFO(先进先出)、LIFO(先进后出)和PriorityQueue(优先级队列),并结合生产者消费者模型进行实战演练,展示了如何在多线程环境下确保线程安全地使用queue队列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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个的时候继续生产。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值