一、队列和列表的区别
1.队列是先进先出,列表可以读取某个指定数据
2.队列如果将储存的数据都读完就结束,列表可以反复读取
例如:
#列表指定读取某个 数据
a_list = [1,2,3,4]
print(a_list[2])
import queue
#先进先出
a_queue = queue.Queue()
for i in range(1,5):
a_queue.put(i)
while a_queue.qsize()>0:
print(a_queue.get())
二、具体介绍一下queue
在使用queue的时候要先引入queue模块,创建对象~
其中queue可以创建出三种对象分别是
1.先进先出行Queue(maxsize = ?)
import queue
a_queue =queue.Queue()
a_queue.put("1")
a_queue.put("2")
print(a_queue.get(),a_queue.get())
>>>1 2
通过上面的例子我们能发现,put 方法是往队列放数据,但是队列跟列表不同取完之后数据就没有了,如果取的数据大于列表存放的数据就会卡住这时候有两种解决办法,第一种调用get_nowait()方法,这时候就会报异常queue.Empty,第二种就是从get自身解决,get(block = False),默认的时候block是True。
2.后进先出LifeQueue()是个缩写是Last in first out
import queue
a_queue =queue.LifoQueue()
for i in range(2):
a_queue.put(i)
while 0<a_queue.qsize():
print(a_queue.get())
>>>
1
0
3.priorityQueue可以理解成vip,看你的心情让那先出就先出
import queue
a_queue =queue.PriorityQueue()
a_queue.put((3,"d"))
a_queue.put((1,"a"))
a_queue.put((2,"c"))
while a_queue.qsize()>0:
print(a_queue.get())
>>>
(1, 'a')
(2, 'c')
(3, 'd')
三、利用queue和多线程写一个生产者消费者
import queue
import threading,time
q= queue.Queue(maxsize=10)
def Producer():
for i in range(10):
q.put("生产第%s骨头"%i)
time.sleep(0.1)
def Consumer(name):
while True:
try:
print(name,"吃掉了【%s】"%q.get(timeout=0.4))
except:
break
t = threading.Thread(target=Producer)
c = threading.Thread(target=Consumer,args=("小黄",))
c1 = threading.Thread(target=Consumer,args=("小hei",))
t.start()
c.start()
c1.start()