码迷,mamicode.com
首页 > 其他好文 > 详细

pyhton中的Queue(队列)

时间:2016-07-06 09:58:42      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

什么是队列?

队列就像是水管子,先进先出,与之相对应的是栈,后进先出。

队列是线程安全的,队列自身有机制可以实现:在同一时刻只有一个线程在对队列进行操作。

存数据,取数据

1 import Queue
2 
3 q = Queue.Queue() #调用队列生成对象
4 q.put(1)  #存放第一个值到队列
5 q.put(2)  #存放第二个值到队列
6 
7 
8 print get frist one:,q.get() #获取队列的第一个值
9 print get second on:,q.get() #获取队列的第二个值

如果队列中的数据被取完了怎么办呢?

  会阻塞

q = Queue.Queue() #调用队列生成对象

q.put(1)  #存放第一个值到队列
q.put(2)  #存放第二个值到队列

a = q.get() #获取队列的第一个值
print get frist one:%s % a
b = q.get() #获取队列的第二个值
print get second one:%s % b
c = q.get()#获取队列的第三个值
print get third one:%s % c

#结果:
‘‘‘
get frist one:1
get second one:2
#这里是阻塞状态,一直在等待着值进来~
‘‘‘

取不到值的时候如何能让它不阻塞?

  get_nowait()方法取 

复制代码
q = Queue.Queue() #调用队列生成对象

q.put(1)  #存放第一个值到队列
q.put(2)  #存放第二个值到队列

a = q.get() #获取队列的第一个值
print get frist one:%s % a
b = q.get() #获取队列的第二个值
print get second one:%s % b
c = q.get_nowait()#获取队列的第三个值 ,使用:get_nowait()
print get third one:%s % c

不阻塞的时候,取不到又会报错,怎么办?

  异常处理

q = Queue.Queue() #调用队列生成对象
try:
    q.get_nowait()
except Queue.Empty as f:
    print The Queue is empty!‘ 

队列的长度是可以规定的哦

  那么问题来了,队列被存满了怎么办?----->会阻塞...

  如何能不阻塞?---->put_nowait()----->无法存放会报错------>报错怎么办?------>异常处理。

q = Queue.Queue(2) #调用队列生成对象

q.put(1)  #存放第一个值到队列
print put value 1 done
q.put(2)  #存放第二个值到队列
print put vlaue 2 done
q.put(3) #存放第三个值到队列
print put value 3 done


#结果:
‘‘‘
put value 1 done
put vlaue 2 done
#这里会阻塞,会一直等待~
‘‘‘

 参考资料:

  http://www.cnblogs.com/luotianshuai/p/5098408.html

pyhton中的Queue(队列)

标签:

原文地址:http://www.cnblogs.com/along1226/p/5645647.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!