queue (队列)
队列是为线程安全使用的。
1.先入先出
import queue #测试定义类传入队列 class Foo(object): def __init__(self,n): self.n = n new = queue.Queue(maxsize=3) new.put(1) new.put(Foo(1),timeout=2) # 超时时间后,抛出队列full异常 new.put([1, 2, 3],timeout=2) print(new.full()) #判断队列是否满 True #new.put("abc",timeout=1) #队列已满,再放报错 print(new.qsize()) # 查看当前队列长度 print(new.get()) print(new.get()) print(new.get()) print(new.empty()) #判断队列是否为空 True #print(new.get_nowait()) #队列已空,取不到数据报异常
2.后进先出
q = queue.LifoQueue() #指定使用LifoQueue q.put(3) q.put(2) print(q.get_nowait()) print(q.get_nowait()) “"" 2 3 """
3.优先级队列
存入一个元组,第一个为优先级,第二个为数据,第三个默认超时时间
import queue new = queue.PriorityQueue(maxsize=3) new.put((1,[1,2,3])) new.put((10,"strings")) new.put((20,"strings")) print(new.get_nowait()) print(new.get_nowait()) print(new.get_nowait()) “”“ (1, [1, 2, 3]) (10, 'strings') (20, 'strings') “”“
生成者消费者模型
通过queue.task_done 和 queue.join 实现
一对一
import threading, queue, time #生产者消费者模型为了程序松耦合,
#生产者生产消息 def consumer(n): while True: print("