Python多线程(3)——Queue模块
2015-08-15 22:27
537 查看
Queue模块支持先进先出(FIFO)队列,支持多线程的访问,包括一个主要的类型(Queue)和两个异常类(exception classes)。
Python 2 中的Queue模块在Python 3中更名为 queue。
Queue对象的创建
可以通过实例化Queue类型获得队列对象:
创建新的队列,参数 maxsize 的含义是:
如果 maxsize > 0:当 q 中的元素达到 maxsize 个时,队列就满了,此时再有一个线程希望向里面插入时,如果指定了 block 选项,就会阻塞直到一个线程从里面抽出一个元素。
如果 maxsize <= 0:Python会认为这是一个没有容量限制的队列。
Queue模块定义的异常类
如果队列 q 是空的,此时又调用了 q.get(False),就会抛出该异常。
如果队列q是满的,而又调用了 q.put(x, False),就会抛出该异常。
Queue对象的方法
判断队列是否为空。
判断队列是否已满。
参数 block 为 False 时,参数 timeout 没有意义,因为线程不会阻塞:
如果队列不为空,取走并返回该元素;
如果队列为空,抛出Queue.Empty
block 为 True 时,结合超时 timeout 判断当队列空时,是一直阻塞进程,还是进程阻塞一段时间。
get_nowait()等于get(False),或者get(timeout=0)即不论队列空否,都不阻塞等待。
例如:
向队列中插入 item,如果队列满了,抛出Queue.Full或线程阻塞等待。
返回当前队列中的元素个数。
Python 2 中的Queue模块在Python 3中更名为 queue。
Queue对象的创建
可以通过实例化Queue类型获得队列对象:
q = Queue.Queue(maxsize=0)
创建新的队列,参数 maxsize 的含义是:
如果 maxsize > 0:当 q 中的元素达到 maxsize 个时,队列就满了,此时再有一个线程希望向里面插入时,如果指定了 block 选项,就会阻塞直到一个线程从里面抽出一个元素。
如果 maxsize <= 0:Python会认为这是一个没有容量限制的队列。
Queue模块定义的异常类
Queue.Empty
如果队列 q 是空的,此时又调用了 q.get(False),就会抛出该异常。
Queue.Full
如果队列q是满的,而又调用了 q.put(x, False),就会抛出该异常。
Queue对象的方法
q.empty()
判断队列是否为空。
q.full()
判断队列是否已满。
q.get(block=True, timeout=None) q.get_nowait()
参数 block 为 False 时,参数 timeout 没有意义,因为线程不会阻塞:
如果队列不为空,取走并返回该元素;
如果队列为空,抛出Queue.Empty
block 为 True 时,结合超时 timeout 判断当队列空时,是一直阻塞进程,还是进程阻塞一段时间。
get_nowait()等于get(False),或者get(timeout=0)即不论队列空否,都不阻塞等待。
例如:
try: x = q.get_nowait() except Queue.Empty: print "no more items to process"
q.put(item, block=True, timeout=None) q.put_nowait(item)
向队列中插入 item,如果队列满了,抛出Queue.Full或线程阻塞等待。
q.qsize()
返回当前队列中的元素个数。
q.join()
q.task_done()
相关文章推荐
- python3 slice
- Python 学习之Virtualenv
- Python多线程(1)——介绍
- python 机器学习之kNN算法
- Python多线程(2)——线程同步机制
- vijos - P1164曹冲养猪(中国剩余定理 + python)
- Python3 字符串
- Python 3 数值计算
- 用Python 爬虫爬取贴吧图片
- Python编程中常用的12种基础知识总结
- 06 序列:字符串、列表和元组 - 《Python 核心编程》
- python 笔记(一) —— 不要误用 ++i、--i
- 小白Windows7/10 64Bit安装Theano并实现GPU加速(没有MinGw等,详细步骤)
- 树莓派用Python写几个简单程序6_yeelink平台
- 树莓派用Python写几个简单程序4_UART
- 使用Python创建.sd服务定义文件,实现脚本自动发布ArcGIS服务
- 使用Python创建.sd服务定义文件,实现脚本自动发布ArcGIS服务
- 树莓派用Python写几个简单程序3_i2c
- python pandas 如何对一列做四舍五入的操作
- 【Python基础】Python中的协程