15.队列Queue的特点以及使用,优先级等
#生产者与消费者模式,模式解释:比如MVC设计模式 ''' 1.队列 (1)特点:先进先出 (2)python2 VS python3 python2:from Queue import queue python3:from queue import Queue join--阻塞动作 blocked--状态 (3)使用 Python的Queue模块中提供了同步的,线程安全的队列类 a.FIFO----(First In First Out)先进先出 b.LIFO----(Last In First Out)后进先出 中间的时候,给自己贴一个标签,给自己设置一个优先级 c.priority----优先级队列 这些队列都实现了锁原语(可以理解为原子操作,即要么不做,要么做完),能够在多线程中直接使用 可以使用队列来实现线程间的同步问题 ''' from queue import Queue #可以生成优先级队列 import queue #这样不安全 可能会对其进行更改 # download__list = [11,22,33] q = Queue(3) #默认先进先出队列 #判断队列是否为空 # print(q.empty()) #往队列中放数据 q.put('d1') q.put('d2') q.put('d3') # print(q.qsize()) #判断是否空和满 # print(q.empty(),q.full()) #取数据 # print(q.get()) # print(q.get()) # print(q.get()) # print(q.get(timeout=2))#阻塞,超时之后抛出queue.Empty异常,没有数据强制取 # print(q.get_nowait())#不要等待,没有数据抛出queue.Empty异常 #b.规定队列长度 # q1 = Queue(maxsize=4)#最大任务数为4 # q1.put(1) # q1.put(2) # q1.put(3) # q1.put(4) # q1.put(5) # q1.put(5,timeout=2)#阻塞,如果队列已满,抛queue.Full异常 # q1.put(5,block=False)#抛queue.Full异常 # print(q1.qsize())#获取队列当中的任务数量大小 # print('~~~~~~~~~~~~~') #c.队列优先级,数字小的优先级高 q2 = queue.PriorityQueue() q2.put((1,'d1')) q2.put((2,'d2')) q2.put((-1,'d3')) q2.put((0,'d4')) # print(q2.get()) # print(q2.get()) # print(q2.get()) # print(q2.get()) #取里面的数据 # i = 0 # while i < q2.qsize(): # print(q2.get()) #后进先出队列 q3 = queue.LifoQueue() q3.put(1) q3.put(2) q3.put(3) i = 0 while i < q3.qsize(): print(q3.get())