队列:
import queue q = queue.Queue() #先入先出 print(q.empty()) #判断是否为空,空返回True q.put("d1") q.put("d2") q.put("d3") print(q.full()) #判断是否满,满返回True print(q.get()) #d1 print(q.get()) #d2 print(q.get()) #d3 print(q.get(timeout=1)) #阻塞 可以使用q.get(timeout = 1)设置超时来解决阻塞问题,抛出queue.Empty异常 print(q.get_nowait()) #接上一行的例子,还可以设置不要等待,没有数据即刻抛出异常 print(q.qsize()) #或者使用if判断qsize是否等于0 print(q.get(block=False)) #block参数False也可以解决程序阻塞问题 #设置具有长度限制的队列 q = queue.Queue(maxsize=3) #长度为3 q.put(1) q.put(2) q.put(3) q.put(4, block=False) #这里程序又阻塞了,所以可以使用block,timeout参数解决阻塞问题,异常queue.Full q = queue.PriorityQueue() #设置优先级队列,数字小的优先级高 q.put((1, "King")) q.put((-1, "Jeson")) q.put((10, "Tim")) q.put((5, "Mike")) # q = queue.LifoQueue() #设置后入先出队列 # q.put(1) # q.put(2) # q.put(3) # print(q.get()) # print(q.get()) # print(q.get())
生产者消费者模型:
import threading import time import queue q = queue.Queue(maxsize=10) def producer(name): #生产者 count = 1 while True: q.put("骨头%s" % count) print("生产了骨头", count) count += 1 time.sleep(0.5) def consumer(name): #消费者 while True: print("[%s]取到[%s]并且吃了它..." % (name, q.get())) time.sleep(1) p = threading.Thread(target=producer, args=("Tim",)) c1 = threading.Thread(target=consumer, args=("King",)) c2 = threading.Thread(target=consumer, args=("Wang",)) p.start() c1.start() c2.start()