python Queue error
来源:互联网 发布:如何关闭4g网络 编辑:程序博客网 时间:2024/04/30 08:58
1. 阻塞模式导致数据污染
import Queue
q = Queue.Queue(10)
for i in range(10):
myData = 'A'
q.put(myData)
myData = 'B'
这是一段极其简单的代码,但我总是不能获得期望的结果(期望在队列中写入10个A,却总是混杂了B)。原来,Queue.put()默认有 block = True 和 timeou 两个参数。当 block = True 时,写入是阻塞式的,阻塞时间由 timeou 确定。正因为阻塞,才导致了后来的赋值污染了处于阻塞状态的数据。Queue.put()方法加上 block=False 的参数,即可解决这个隐蔽的问题。但要注意,非阻塞方式写队列,当队列满时会抛出 exception Queue.Full 的异常。
2. 无法捕获 exception Queue.Empty 的异常
while True:
......
try:
data = q.get()
except Queue.Empty:
break
我的本意是用队列为空时,退出循环,但实际运行起来,却陷入了死循环。这个问题和上面有点类似:Queue.get()默认的也是阻塞方式读取数据,队列为空时,不会抛出 except Queue.Empty ,而是进入阻塞直至超时。 加上block=False 的参数,问题迎刃而解。
3. Queue常用方法汇总
Queue.Queue(maxsize=0) FIFO, 如果maxsize小于1就表示队列长度无限
Queue.LifoQueue(maxsize=0) LIFO, 如果maxsize小于1就表示队列长度无限
Queue.qsize() 返回队列的大小
Queue.empty() 如果队列为空,返回True,反之False
Queue.full() 如果队列满了,返回True,反之False
Queue.get([block[, timeout]]) 读队列,timeout等待时间
Queue.put(item, [block[, timeout]]) 写队列,timeout等待时间
Queue.queue.clear() 清空队列
- python Queue error
- python Queue
- Queue python
- Python--Queue
- python Queue
- python Queue
- python queue
- Python queue
- python Queue
- python queue
- [Python] python Queue模块
- python Queue模块
- python Queue模块
- python Queue模块
- python Queue模块
- python Queue模块
- python Queue module
- python模块学习---Queue
- Android监听事件
- Ubuntu apt-get 换源
- c++友元
- javascript 原型链和继承(2)
- long long ,列表初始化
- python Queue error
- 框架 day51 BOS项目练习(定区添加及查询,Hessian入门,基于hessian实现定区关联客户功能)
- C++中多线程与Singleton的那些事儿
- 向量几何在游戏编程中的使用5
- 布尔运算--java位图搜索实现
- 找工作的一些感悟——前端小菜的成长
- 银行风控案例-python学习笔记
- 字典树(Trie树)模版
- 二叉查找树/删除结点操作