队列:
- 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()
来源: http://www.bubuko.com/infodetail-1958451.html