python 队列实现_python中实现队列的queue模块

python中的queue模块提供了同步的、线程安全的队列类,包括FIFO(先进先出)的Queue类和LIFO(后进先出,栈结构)LifoQueue类和优先队列PriorityQueue类,它们都实现了锁原语(可以理解为原子操作,要么不做,要么就全部做完),解决了python多线程编程中的线程不安全。

队列与列表的区别

队列中数据只有一份,取出就没有了,列表数据取出只是复制了一份

1、初始化一个队列

Queue(maxsize=0) 或者

LifoQueue(maxsize=0) 或者

PriorityQueue(maxsize=0)

maxsize是个整数,指明了队列中能存放的数据个数上限。一旦达到上限,插入会导致阻塞,直到队列中有数据被取出。如果maxsize<=0,队列大小没有限制

2、qsize():获取队列当前数据的数量

3、empty():判断队列是否为空

4、full():判断队列是否满

5、get(block=True, timeout=None):从队列中取出一个数据

block:是否阻塞调用,

阻塞调用如果队列为空会一直阻塞直到队列中放入数据

非阻塞调用时队列已空抛出Empty异常

如果设置了timeout超时时间并且发生超时抛出Empty异常

get_nowait()为非阻塞取出数据,等同于get(block=False)

6、put(item, block=True, timeout=None):讲一个数据放入到队列中

阻塞调用如果队列已满会一直阻塞直到队列中取出数据

非阻塞调用时队列已满抛出Full异常

如果设置了timeout超时时间并且发生超时抛出Full异常

put_nowait(item)为非阻塞取出数据,等同于put(item,block=False)

7、queue.clear():清空队列

8、task_done():意味着从队列中取出的一个任务已经完成。每一次调用get()得到一个任务,接下来的task_done()调用告诉队列该任务已经处理完毕。如果当前一个join()正在阻塞,它将在队列中的所有任务都处理完时恢复执行(即每一个由put()调用入队的任务都有一个对应的task_done()调用)。

9、join():阻塞调用线程,直到队列中的所有任务被处理掉。只要有数据被加入队列,未完成的任务数就会增加。当调用task_done(),未完成的任务数就会减少。当未完成的任务数降到0,join()解除阻塞。

优先队列:优先队列不同于先进先出或后进先出,它是出的规则和进入的顺序无关,只和数据的优先级有关,优先级小的数据先出,在put()的时候item需要传入一个二元元祖,第一个元素是一个正整数,表示优先级,第二个元素是放入的数据,优先级的数字可以重复,同等优先级的数据遵循先进先出的原则。

最后编辑:2020-04-06作者:qingheluo

be51fb116a4da7c73e5e89a63655c6bd?s=96&d=mm&r=g

这个作者貌似有点懒,什么都没有留下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值