pyhton中的Queue(队列)
Posted Nuwanda
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pyhton中的Queue(队列)相关的知识,希望对你有一定的参考价值。
什么是队列?
队列就像是水管子,先进先出,与之相对应的是栈,后进先出。
队列是线程安全的,队列自身有机制可以实现:在同一时刻只有一个线程在对队列进行操作。
存数据,取数据
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(队列)的主要内容,如果未能解决你的问题,请参考以下文章
pyhton—opencv直线检测(HoughLines)找到最长的一条线