队列作用
1、解耦,使程序之间实现松耦合,一个模块修改了不会影响其他的
2、提高处理效率
# queue模块中的常用方法:
# queue.qsize() 返回队列的大小
# queue.empty() 如果队列为空,返回True,反之False
# queue.full() 如果队列满了,返回True,反之False
# queue.full 与 maxsize 大小对应
# Queue.get(block=True, timeout=None)获取队列,timeout等待时间
# q.get(block=False),默认是True,如果为true,并且此时队列为空会阻塞,一直卡住
# queue.get(timeout=1) ,1秒后还没来就结束
# queue.get_nowait() 相当queue.get(False)
# 如果队列没数据了,会抛出异常queue.empty,可以抓取
# queue.put和get一样可以抛出异常和设置超时时间
# queue.put(item, block=True, timeout=None) 写入队列,timeout等待时间
# queue.put_nowait(item) 相当queue.put(item, False)
# queue.task_done() 在完成一项工作之后,queue.task_done()函数向任务已经完成的队列发送一个信号
# queue.join() 实际上意味着等到队列为空,再执行别的操作
import queue
# q = queue.Queue(maxsize=3) #最大放三个数据,先进先出
# q.put("d1")
# q.put("d2")
# q.put("d3")
# print(q.qsize())
# print(q.get())
# print(q.get())
# print(q.get())
# q2 = queue.LifoQueue() #后进先出
# q2.put("d1")
# q2.put("d2")
# q2.put("d3")
# print(q2.get())
q2 = queue.PriorityQueue() #优先级队列,从小到大
q2.put((10,"d1"))
q2.put((-1,"d2"))
q2.put((11,"d3"))
print(q2.get())
print(q2.get())
print(q2.get())
#!/usr/bin/env python
#-*-coding:utf8-*-
#生产者消费者
import threading,queue,time
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 q.qsize()>0:
while True:
print("[%s] 取到[%s]并且吃了它。。。"%(name,q.get()))
time.sleep(1)
p = threading.Thread(target=Producer,args=("alex",))
c = threading.Thread(target=Consumer,args=("cc",))
d = threading.Thread(target=Consumer,args=("dd",))
p.start()
c.start()
d.start()
# queue模块中的常用方法:
# queue.qsize() 返回队列的大小
# queue.empty() 如果队列为空,返回True,反之False
# queue.full() 如果队列满了,返回True,反之False
# queue.full 与 maxsize 大小对应
# Queue.get(block=True, timeout=None)获取队列,timeout等待时间
# q.get(block=False),默认是True,如果为true,并且此时队列为空会阻塞,一直卡住
# queue.get(timeout=1) ,1秒后还没来就结束
# queue.get_nowait() 相当queue.get(False)
# 如果队列没数据了,会抛出异常queue.empty,可以抓取
# queue.put和get一样的属性,可以抛出异常和设置超时时间
# queue.put(item, block=True, timeout=None) 写入队列,timeout等待时间
# queue.put_nowait(item) 相当queue.put(item, False)
# queue.task_done() 在完成一项工作之后,queue.task_done()函数向任务已经完成的队列发送一个信号
# queue.join() 实际上意味着等到队列为空,再执行别的操作
import queue
# q = queue.Queue(maxsize=3) #最大放三个数据,先进先出
# q.put("d1")
# q.put("d2")
# q.put("d3")
# print(q.qsize())
# print(q.get())
# print(q.get())
# print(q.get())
# q2 = queue.LifoQueue() #后进先出
# q2.put("d1")
# q2.put("d2")
# q2.put("d3")
# print(q2.get())
q2 = queue.PriorityQueue() #优先级队列,从小到大
q2.put((10,"d1"))
q2.put((-1,"d2"))
q2.put((11,"d3"))
print(q2.get())
print(q2.get())
print(q2.get())