queue队列

1.作用:解耦,提高效率。队列就是一个容器,一个有顺序的容器。

q.queue.Queue(maxsize=3): 生成一个队列的实例,并且最多存储3个元素

q.get(item,block=Ture, timeout=None ): 从队列里取数据

q.get( block=Ture, timeout=None) :  两个可选参数,默认取不到数据就阻塞

q.get( block=False): 取不到数据不阻塞,而是抛出异常

q.get( timeout=1):  卡1秒

q.qsize( ): 查询队列中还剩多少元素。

#先进先出
import queue
q=queue.Queue() #生成一个队列的实例
q.put('d1')
q.put('d2')
q.put('d3')
print(q.qsize())
print(q.get())

 运行结果:

3
d1

2. Lifo: last in first out, 后进先出

import queue
q=queue.LifoQueue()
q.put(1)
q.put(2)
q.put(3)
print(q.get())
print(q.get())
print(q.get())

 运行结果:

3
2
1

3. 存储数据是可设置优先级的队列 queue.PriorityQueue(maxsize=0)

import queue
q=queue.PriorityQueue()
q.put((10,'Alex'))
q.put((2,'Jack'))
q.put((5,'Tom'))

print(q.get())
print(q.get())
print(q.get())

 运行结果:

(2, 'Jack')
(5, 'Tom')
(10, 'Alex')

4. 生产者消费者模型

import threading,time,queue
q=queue.Queue(maxsize=10)

def Producer(name):
    count=1
    while True:
        q.put("骨头%s" % count)
        print('骨头',count)
        count+=1
        time.sleep(0.1)

def Consumer(name):
    while True:
        print('%s 吃到了 %s'%(name,q.get()))
        time.sleep(1)
p=threading.Thread(target=Producer,args=('alex',))
c1=threading.Thread(target=Consumer,args=('张三',))
c2=threading.Thread(target=Consumer,args=('李四',))

p.start()
c1.start()
c2.start()

 运行结果:

骨头 1
张三 吃到了 骨头1
骨头 2
李四 吃到了 骨头2
骨头 3
骨头 4
骨头 5
骨头 6
骨头 7
骨头 8
骨头 9
骨头 10
骨头 11
张三 吃到了 骨头3
骨头 12
李四 吃到了 骨头4
骨头 13
骨头 14
骨头 15
张三 吃到了 骨头5
骨头 16
李四 吃到了 骨头6
骨头 17
张三 吃到了 骨头7
李四 吃到了 骨头8
骨头 18
骨头 19
张三 吃到了 骨头9
李四 吃到了 骨头10
骨头 20
张三 吃到了 骨头11
骨头 21
李四 吃到了 骨头12
骨头 22
张三 吃到了 骨头13
骨头 23
李四 吃到了 骨头14
原文地址:https://www.cnblogs.com/momo8238/p/7352062.html