队列模块:消息在多线程间安全交换,实现多生产者、多消费者队列。
看,源队列模块包含四个有用的类:
00-1010 1,队列(),简单队列():先进先出队列
2.LifoQueue():先进先出队列。
3.PriorityQueue():优先级队列,优先级编号,按照ascii码列表顺序从小到大输出。
数据格式:(优先级号,数据)
00-1010Queue():默认值为0,小于等于0无限长;Queue(5)-长度为5的SimpleQueue():无参数,长度不限LifoQueue():继承Queue类,就像Queue实例化一样,PriorityQueue():继承Queue类,就像Queue实例化一样,
一、三种队列:
1,queue () FIFO。从队列导入队列
que=队列()
Que.empty() #队列为空,返回True,否则返回False。
Que.full() #当队列设置长度时,当队列已满时返回True,否则返回False。
Que.qsize() #返回队列的长度。
# 4种写入队列的方式
que.put(1)
#解读:1。相当于阙。put (1,block=真,超时=无)
# 2.阻塞写:队列充满阻塞,不满意不允许写。
que.put(1,超时=1)
#解读:1。相当于que.put(1,block=True,timeout=1)
# 2.阻塞写:队列充满阻塞,阻塞超过1秒,错误队列。报告已满。
Que.put(1,block=False) #超时参数在未被阻止时无效。
#解读:1。相当于que.put (1,block=false,timeout=none)
# 2.非阻塞写入:当队列已满时,立即报告错误队列。全部
que.put_nowait()
#解读:1。相当于que.put(1,block=False)
# 2.非阻塞写入:当队列已满时,立即报告错误队列。全部
# 4种读取队列的方法
获取()#获取队列数据
#解读:1。相当于que.get (block=true,timeout=none)
# 2.阻塞获取:队列为空时阻塞,等到不为空,再读取无误。
que.get(超时=1)
#解读:1。相当于que.get(块=真,超时=1)
# 2.阻塞获取:队列为空,阻塞持续1秒以上,error _queue。报告为空。
Que.get(block=False) #超时参数在未被阻止时无效。
#解读:1。相当于que.get (block=false,timeout=none)
# 2.非阻塞获取:如果队列为空,立即报告错误_ queue.empty
que.get_nowait()
#解释:相当于que.get(block=False)
# 2.非阻塞获取:如果队列为空,立即报告错误_ queue.empty
# jion和task_done通常一起使用,请参见生产者和消费者模型的示例。
que.join()
#解读:1。一般用于生产者线程,put后线程会被阻塞,直到task_done解除阻塞后生产者线程才会继续运行。
# 2.您必须与使用者线程task_done合作才能解除阻塞,否则生产者线程将继续阻塞。
que.task_done()
#解读:1。对于使用者线程,在获取后使用task_done,当队列为空时取消阻止。
# 2.一个使用者线程task_done只能解除一个生产者线程的连接。2.简单队列(先进先出)
从队列导入简单队列
que=SimpleQueue()
Queue . empty()#等于Queue()的empty()
Que.qsize() #等于Queue()的qsize()
# que.full() #简单队列没有这个方法,因为队列的长度是无限的,不可能是满的。
#写入队列有2种方式(当长度为无穷大时,写入非阻塞模式不会超时)
Que.put(1) #立即写入,块和超时参数无效。
Que.put_nowait(1) #相当于que.put(1)
Que.get() #等于Queue()的get()
# que.task_done() #简单队列没有这个方法,不提供函数。
# que.join() # Simple queue没有这个方法,也没有提供函数3,LifoQueue () FIFO。
从队列导入后进先出队列
que=LifoQueue()
#方法和用法等同于Queue()4,PriorityQueue()按照ascii码表的顺序取出。
从队列导入优先级队列
que=PriorityQueue()
que.put([2,' b'])
# put数据格式1:元组(优先级号,数据)
# put数据格式2:列表[优先级号,数据]
#方法和用法等同于Queue()
二、四个类的实例化方法:
1。生产和消费;多生产者线程和多消费者线程
2.1生产1消费(在join和task_done的配合下)
注意:穿线。当前线程()。名称#获取线程名称。
3.两个生产者线程和一个消费者线程
注意:穿线。当前线程()。名称#获取线程名称。
00-1010先进先出:队列()或简单队列()都可以。
如果队列长度没有限制,并且没有使用阻塞模式,那么SimpleQueue()就足够了。SimpleQueue没有高级方法join()和task_done()。