49.Python进阶_队列01_先进先出队列

Python提供线程安全的FIFO队列,初始化时可设置最大消息数量。队列满时插入数据会阻塞,空时取出数据也会阻塞。常用方法包括q.full()、q.empty()和q.qsize()。join()方法会阻塞,直到队列中的所有任务被处理,task_done()用于标记任务已完成。正确使用task_done()与put的次数匹配才能避免阻塞。
摘要由CSDN通过智能技术生成

Python的Quene模块中提供了同步的,线程安全的队列类,包括 -

  • FIFO(先进先出)队列Queue,
  • LIFO(先进后出)队列LifoQueue,
  • 优先级队列PriorityQueue

这些队列都实现了锁原语,能够在多线程中直接使用,可以使用列表来实现线程间同步;

初始化Queue()对象时,如果(q=Queue(),若括号中没有指定最大可接受的消息数量,或者数量为负值,那么代表可接受的消息数量没有上限)

队列的方法:

   put(self,item,block=True,time=None)     #给队列中添加数据
  get(self,block=True,timeout=None)     #从队列中获取数据
  • 如果队列满了,默认一直等待,
  1. timeout时间设置等待时间,后超过时间会报错,
  2. block设置为False就会不等待;和put_nowait方法一样

并且超过设置数量或者取出数量后都会报错;

基本FIFO队列(先进先出)

FIFO即First in First Out,先进先出。Queue提供了一个基本的FIFO容器,使用方法很简单,maxsize是个整数,指明了队列中能存放的数据个数的上限。一旦达到上限,插入会导致阻塞,直到队列中的数据被消费掉。如果maxsize小于或者等于0,队列大小没有限制。

from queue import Queue

q = Queue(5)  #创建队列对象

for i in range(5):

    q.put(i)  #给队列中添加数据

while not q.empty(): #判断是否为空
    print(q.get())#从队列中取出数据

运行结果:

0
1
2
3
4

如果队列中数据已满,继续添加数据会报错,同样如果已空,继续取数据也会报错;

from queue import Queue
q = Q
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值