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


posted @ 2018-03-11 00:13  fanmleii  阅读(105)  评论(0编辑  收藏  举报