python多线程-queue队列类型优先级队列,FIFO,LIFO

Queue在python3中重命名为queue,在python2到python3转换中可以自动转换

队列可应用在多个生产者多个消费者的模型中<<详情参考>>,并且在多线程中可用于线程之间数据信息的安全交换通信,防止冲突。
在队列中已经实现多线程的锁机制

队列Queue提供三种队列类型

主要区别是操作顺序的不同:
1.class Queue.Queue(maxsize=0)
FIFO队列,先进先出,maxsize定义队列长度,若maxsize等于0或者小于0,则该队列长度为无限,默认是无限
2.class Queue.LifoQueue(maxsize=0)
LIFO 后进先出,类似于堆栈,若maxsize等于0或者小于0,则该队列长度为无限,默认是无限
3.class Queue.PriorityQueue(maxsize=0)
优先级队列,值越低则优先级越高,若maxsize等于0或者小于0,则该队列长度为无限,默认是无限

异常:

1.exception Queue.Empty
当get()或get_nowait() 触发
2.exception Queue.Full
当put()或put_nowait()触发

三种队列均提供如下方法:

1.Queue.qsize() 队列长度,注:当qsize长度大于0时,get()并不一定成功,当长度小于maxsize时,put()也不一定成功
2.Queue.empty() 是否队列为空,空True,反之False
3.Queue.full() 队列是否满,满True,反之False
4.Queue.get([block[, timeout]])
获取队列一个排队对象,timeout等待时间,如果get等待timeout时间,仍为空,则抛出异常。默认block为true timeout为null,一直等待有对象返回
5.Queue.get_nowait() 相当Queue.get(False)
6.Queue.put(item)
将一个对象写入队列,timeout等待时间,如果一个put等待了timeout时间,仍为满,则会抛出异常。默认block为true timeout为null,一直等待对象写入
7.Queue.put_nowait(item) 相当Queue.put(item, False)
8.Queue.task_done()
9.Queue.join() 相当与threading中将进程挂起,知道将子线程中的所有任务都处理完成后,才退出join,进行后面的步骤

例如模型:

def worker():
while True:
item = q.get()
do_work(item)
q.task_done()

q = Queue()
for i in range(num_worker_threads):
t = Thread(target=worker)
t.daemon = True
t.start()

for item in source():
q.put(item)

q.join()

1.FIFO队列先进先出:
#coding=utf8
import Queue

queuelist = Queue.Queue()

for i in range(5):
    if not queuelist.full():
       queuelist.put(i)
       print "put list : %s ,now queue size is %s "%(i,queuelist.qsize())

while not queuelist.empty():
    print "get list : %s , now queue size is %s"%(queuelist.get(),queuelist.qsize())

输出:

put list : 0 ,now queue size is 1 
put list : 1 ,now queue size is 2 
put list : 2 ,now queue size is 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值