(八)多线程之queue
一、线程queue
1,定义:
queue队列 :使用 import queue,用法与进程 Queue一样。
queue is especially useful in threaded programming when information must be exchanged safely between multiple threads.
2,class queue.Queue(maxsize=0) 队列功能:先进先出
import queue q = queue.Queue(3) # 先进先出--> 队列,指定队列大小,最大三个值 q.put("first") # 放值,放任何类型的值都OK q.put(2) q.put("second") # q.put(4) # 放多了,阻塞住,卡那了 # q.put(4,block=True) # block 这个参数默认是阻塞的(队列满了就阻塞了) # q.put(4,block=False) # 不阻塞,但是会抛异常,告诉你队列满了 相当于 q.put_nowait(4) # q.put(4,block=True,timeout=3) # 队列满的情况下阻塞,阻塞 3秒 print(q.get()) # 队列先进先出,取第一个进去的,这里是 "first" print(q.get()) print(q.get()) # print(q.get()) # 值取没了,队列变空,再取值,阻塞住,卡那了,与put用法一样 print(q.get(block=True,timeout=3)) # q.get(block=False) 就相当于 q.get_nowait()
3,class queue.LifoQueue(maxsize=0) 堆栈功能:last in first out(后进先出)
# 堆栈功能:后进先出 import queue q = queue.LifoQueue(3) # 后进先出---> 堆栈,与队列用法差不多 q.put("first") # 放值,放任何类型的值都OK q.put(2) q.put("second") print(q.get()) print(q.get()) print(q.get()) """ second 2 first """
4,class queue.PriorityQueue(maxsize=0) 优先级队列:存储数据时可设置优先级的队列
# 优先级队列 import queue # 优先级队列,你可以向队列中放一个数据,还要给这个数据放个优先级,优先级越高越先被拿出来。 q = queue.PriorityQueue(3) q.put((10,"first")) # 数组形式,第一个放优先级,第二个放数据,数字越小优先级越高 q.put((40,"second")) q.put((30,"third")) print(q.get()) print(q.get()) print(q.get()) """ (10, 'first') (30, 'third') (40, 'second') """