队列:
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()