<强>一、线程队列强>
队列队列:使用方法同进程的队列一样
如果必须在多个线程之间安全地交换信息时,队列在线程编程中尤其有用。
重要:
<代码> q.put() 代码>:往队列里面放值,当参数块=真正的时候,超时参数将会有作用,当队列已经满了的时候,在往里面放值时,块为真正的程序将会等待超时的时间,过了时间程序会报错,块如果为误时,程序不会等待直接报错
<代码> q.get() 代码>:从队列里面取值,当参数块=真正的时候,超时参数将会有作用,当队列已经空了的时候,在从里面取值时,块为真正的程序将会等待超时的时间,过了时间程序会报错,块如果为误时,程序不会等待直接报错
<代码> q.task_done() 代码>:使用者使用此方法发出信号,表示q.get()返回的项目已经被处理。如果调用此方法的次数大于从队列中删除的项目数量,将引发ValueError异常。
<代码> q.join() 代码>:生产者将使用此方法进行阻塞,直到队列中所有项目均被处理。阻塞将持续到为队列中的每个项目均调用q.task_done()方法为止。
<强>二、线程队列的取值方式强>
2.1先进先出
<代码>类queue.Queue(最大容量=0)代码>
<代码> q=queue.Queue() 代码>:不加参数代表队列可以无限的放数据
q=queue.Queue() #不加参数代表队列可以无限的放数据 q.put(“塞西莉亚陈”) q.put (“xichen”) print (q.get ()) print (q.get ()) “‘ 结果: 塞西莉亚陈 xichen " >之前2.2后进先出
<代码>类queue.LifoQueue(最大容量=0)代码>
<代码> q=Lifo.Queue() 代码>:不加参数代表队列可以无限的放数据
q=queue.LifoQueue() #不加参数代表队列可以无线的放数据 q.put(“塞西莉亚陈”) q.put (“xichen”) print (q.get ()) print (q.get ()) “‘ 结果: xichen 塞西莉亚陈 " >之前<强>三,队列存数据时可以设置优先级
强><代码>类queue.priorityQueue(最大容量=0)代码>
<代码> q=queue.priorityQueue() 代码>:不加参数代表队列可以无限的放数据
3.1优先级队列
# 3。优先级队列 q=queue.PriorityQueue() #不加参数代表队列可以无线的放数据 #把进入一个元组,元组的第一个元素是优先级(通常是数字,也可以是非数字之间的比较),数字越小优先级越高 q.put(2, '塞西莉亚陈')) q.put ((1, xichen)) q.put ((5 ' xuchen ')) print (q.get ()) print (q.get ()) print (q.get ()) “‘ #结果(数字越小优先级越高,优先级高的优先出队): 结果: (1,' xichen ') (2,'塞西莉亚陈') (5,' xuchen ') " >之前3.2方法说明
<代码>最大容量代码>是一个整的数,它设置可以放置在队列中的项数的上限。一旦达到此大小,插入将阻塞,直到使用队列项。如果最大容量小于或等于零,则队列大小为无穷大。
<代码> p.put() 代码>:放值的时候,放的是一个元组()
<代码>异常队列。空代码>:异常队列。空:当对空的队列对象调用非阻塞得到()或get_nowait()时引发异常,也就是说队列为空的时候,再取值就会报错
<代码>异常队列。完整的<>/代码:异常队列.Full:当对已满的队列对象调用非阻塞把()或put_nowait()时引发异常。也就是说当队列已满的时候,再往里面当值的时候将会报错
<代码>队列。qsize() 代码>:
<代码>空()代码>:如果为空,返回真正的
<代码> Queue.full() 代码>:如果已满,返回真正的
<代码> put_nowait(项)> 代码:等同于(项目,False)。
<代码> get_nowait() 代码>:等同于(False)。
<>强提供了两种方法来支持跟踪已加入队列的任务是否已被守护进程使用者线程完全处理:强>
<代码> task_done() 代码>:表示以前加入队列的任务已经完成。由队列使用者线程使用。对于用于获取任务的每个(),后续对task_done()的调用告诉队列任务上的处理已经完成。如果加入(当前处于阻塞状态,那么在处理完所有项之后,它将继续运行(这意味着对于已经放入队列()的每个项,都收到了task_done()调用)。
python程序线程队列队列使用方法解析