Python学习之队列
队列作用
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())