Python基础---队列
队列Queue包含三个类
1:Queue(maxsize=0) 普通模式先进先出
2:LifoQueue(maxsize=0) 后进先出
3:PriorityQueue(maxsize=0) 优先级模式
Queue.qsize() 返回当前队列里存在的个数
Queue.empty() 返回队列是否为空
Queue.full() 返回队列是否存满
Queue.put(item, block=True, timeout=None)
将item放入队列中。
如果可选的参数block为True且timeout为空对象(默认的情况,阻塞调用,无超时)。
如果timeout是个正整数,阻塞调用进程最多timeout秒,如果一直无空空间可用,抛出Full异常(带超时的阻塞调用)。
如果block为False,如果有空闲空间可用将数据放入队列,否则立即抛出Full异常
Queue.put_nowait()无阻塞版本,等同于block=False,timeout=None
Queue.get(block=True, timeout=None) 取出数据,其他与put类似
Queue()示例
import queue
q = queue.Queue() #普通的(先进先出
q.put(1)
q.put(2)
q.put(3)
print(q.qsize()) #获取当前存在的个数
print(q.get()) #取出 当超过的时候会报错
print(q.get())
print(q.get())
结果:
1 2 3
LifoQueue()示例
import queue
q = queue.LifoQueue() #普通的(先进先出
q.put(1)
q.put(2)
q.put(3)
print(q.qsize()) #获取当前存在的个数
print(q.get()) #取出 当超过的时候会报错
print(q.get())
print(q.get())
结果:
3 2 1
PriorityQueue()示例
按照一定的规律确定优先级,例如数字越小优先级越高,或者按字符排序,值得注意的是只能采用一种模式来确定,全为数字或是全为字符,两者不能混在一起,不然会报错。
import queue
q = queue.PriorityQueue() #普通的(先进先出
q.put((2,'b'))
q.put((1,'a'))
q.put((3,'c'))
print(q.qsize()) #获取当前存在的个数
print(q.get()) #取出 当超过的时候会报错
print(q.get())
print(q.get())
结果:
(1, 'a')
(2, 'b')
(3, 'c')
简单的生产者和消费者模型
import queue,threading,time
q = queue.Queue()
def Producer():
count = 0
while True:
q.put('Switch %s' %count)
print('Switch %s' %count)
count += 1
time.sleep(1)
def Consumer():
while True:
if q.qsize() > 0 :
print('buy %s'%q.get())
time.sleep(2)
p = threading.Thread(target=Producer)
c = threading.Thread(target=Consumer)
p.start()
c.start()
结果:
生成了Switch 0
购买了 Switch 0
生成了Switch 1
购买了 Switch 1
生成了Switch 2
生成了Switch 3
购买了 Switch 2
生成了Switch 4
生成了Switch 5
生成了Switch 6
购买了 Switch 3
生成了Switch 7
购买了 Switch 4
生成了Switch 8