1. 队列
import queue q=queue.Queue() # 线程安全的,队列是先进先出FIFO q.put("hello") # q.put("xuanxuan") print(q.qsize()) # 获得队列的大小 print(q.get()) # FIFO 所以先打印hello print(q.get())
运行结果:
2. LOFI后进先出的队列---栈
import queue q=queue.LifoQueue() # LIFO后进先出的队列----栈 q.put("hello") q.put("xuanxuan") print(q.qsize()) # 获得队列的大小 print(q.get()) # LifoQueue()是LIFO模型后进先出,所以先打印xuanxuan print(q.get())
运行结果:
3. 带有优先级的队列
import queue q=queue.PriorityQueue() # 带有优先级的队列 q.put((10,"hello")) # put()需要接收一个元组(第一个参数是优先级,第二个是所要传的内容) q.put((4,"xuanxuan")) q.put((2,"嘻嘻")) # 数字越小,代表优先级越高,get()时越会被优先打印 print(q.qsize()) # 打印带有优先级队列的长度 print(q.get()) print(q.get()) print(q.get())
运行结果:
4. 使用多线程借助队列实现生产者消费者模型
import queue from threading import Thread import time import random def procuder(name,food): for i in range(10): q.put((food,i)) # q.put((i,(food,i))) # 如果使用的是带有优先级的队列 print("%s生产%s--%s"%(name,food,i)) def consumer(name): time.sleep(random.random()) food,i=q.get() print("%s消费了%s"%(name,food)) q=queue.Queue() # q=queue.LifoQueue() # 后进先出的队列 # q=queue.PriorityQueue() # 传参时需要传一个元组(第一个参数时优先级,第二个参数是内容) t1=Thread(target=procuder,args=("xuanxuan","酸奶酪")) # 创建一个线程执行生产者--procuder t1.start() for i in range(10): t=Thread(target=consumer,args=(i,)) # 创建10个线程执行consumer消费者 t.start()
运行结果: