Python学习:queue模块

简介

Python标准库提供的queue模块,是多生产者,多消费者的队列,特别适用于在多线程中的线程之间安全地交换数据。

queue模块支持三种类型的队列。分别为先进先出队列(FIFO)、后进先出队列(LIFO)、优先级队列(入值被排序,最小值先出)。

这三种类型的队列通过锁机制,临时锁住竞争的线程。

在queue模块中,还实现了一个简单的FIFO队列,即SimpleQueue。

实现的类

queue模块定义了以下的类:

class queue.Queue(maxsize=0)
#构建FIFO队列,参数maxsize是一个整数值,设置改队列可承载的最大元素个数
#当队列满时,insert操作将阻塞,直到队列有空余
#当参数maxsize小于或者等于0,则队列空间为无限大

class queue.LifoQueue(maxsize=0)
#构建LIFO队列,参数maxsize是一个整数值,设置改队列可承载的最大元素个数
#当队列满时,insert操作将阻塞,直到队列有空余
#当参数maxsize小于或者等于0,则队列空间为无限大

class queue.PriorityQueue(maxsize=0)
#构建优先级队列,参数maxsize是一个整数值,设置改队列可承载的最大元素个数
#当队列满时,insert操作将阻塞,直到队列有空余
#当参数maxsize小于或者等于0,则队列空间为无限大
#值最小的元素将最先返回

class queue.SimpleQueue
#构建一个队列空间无限大的FIFO队列

实现的异常

queue模块定义了以下的异常:

exception queue.Empty
#当对空的队列对象执行非阻塞的get操作,引起该异常

exception queue.Full
#当对满的队列对象执行非阻塞的put操作,引起该异常

方法

队列对象提供了以下的方法:

Queue.qsize()
#返回队列元素个数,注意,当方法返回值大于0,并不保证紧接的get操作不会阻塞,当方法返回值小于maxsize,并不保证紧接的put操作不会阻塞

Queue.empty()
#如果队列为空,返回True,否则返回False
#注意,如果方法返回True,并不保证紧接的put操作不会阻塞,同样,如果方法返回False,并不保证紧接的get操作不会阻塞

Queue.full()
#如果队列为满,返回True,否则返回False
#注意,如果方法返回True,并不保证紧接的get操作不会阻塞,同样,如果方法返回False,并不保证紧接的put操作不会阻塞

Queue.put(item, block=True, timeout=None)
#方法将元素item传入队列中
#如果block为True,且timeout为None,方法将阻塞,直到队列有空余空间
#如果block为True,且timeout为大于0值,则方法将至多阻塞timeout秒,如果队列依然没有空间,则引起exception queue.Full异常
#如果block为False,则参数timeout被忽略,队列如果没有空间,则立马引起exception queue.Full异常

Queue.get(block=True, timeout=None)
#方法从队列删除元素,并通过方法返回值返回该元素
#如果block为True,且timeout为None,方法将阻塞,直到队列有可返回的元素
#如果block为True,且timeout为大于0值,则方法将至多阻塞timeout秒,如果队列依然没有可返回的元素,则引起exception queue.Empty异常
#如果block为False,则参数timeout被忽略,队列如果没有可返回的元素,则立马引起exception queue.Empty异常

Queue.task_done()
#方法表示针对队列元素的任务已经完成,该方法被消费者线程调用。
#如果此时join()方法正在阻塞,则当队列中所有的元素都被处理过(表示对于队列中每个元素,task_done()方法都被调用),join()方法解阻塞

Queue.join()
#阻塞,直到队列中所有的元素都被处理过(task_done())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值