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())
posted @ 2020-02-24 20:13  w_boy  阅读(211)  评论(0编辑  收藏  举报