Python多线程(3)——Queue模块
Python多线程(3)——Queue模块
Queue模块支持先进先出(FIFO)队列,支持多线程的访问,包括一个主要的类型(Queue)和两个异常类(exception classes)。
Python 2 中的Queue模块在Python 3中更名为 queue。
Queue对象的创建
可以通过实例化Queue类型获得队列对象:
1
|
q = Queue.Queue(maxsize = 0 )
|
创建新的队列,参数 maxsize 的含义是:
- 如果 maxsize > 0:当 q 中的元素达到 maxsize 个时,队列就满了,此时再有一个线程希望向里面插入时,如果指定了 block 选项,就会阻塞直到一个线程从里面抽出一个元素。
- 如果 maxsize <= 0:Python会认为这是一个没有容量限制的队列。
Queue模块定义的异常类
1
|
Queue.Empty
|
如果队列 q 是空的,此时又调用了 q.get(False),就会抛出该异常。
1
|
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)即不论队列空否,都不阻塞等待。
例如:
1
2
3
4
|
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()
Python多线程(3)——Queue模块相关推荐
- Python标准库queue模块原理浅析
Python标准库queue模块原理浅析 本文环境python3.5.2 queue模块的实现思路 作为一个线程安全的队列模块,该模块提供了线程安全的一个队列,该队列底层的实现基于Python线程th ...
- Python多线程ping(ping3模块)
Python多线程ping(ping3模块) 代码 from ping3 import ping from concurrent.futures import ThreadPoolExecutor## ...
- Python 多线程(threading模块)
首先,自己区分单线程和多线程的概念,自己去搜 单线程的例子如下: [python] view plaincopyprint? __author__ = 'MrChen' import threadin ...
- python多线程执行其他模块的文件_python并发编程--进程线程--其他模块-从菜鸟到老鸟(三)...
concurrent模块 1.concurrent模块的介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 Proc ...
- python消息队列模块_day43-python消息队列二-queue模块
Python提供了Queue模块来专门实现消息队列Queue对象 Queue对象实现一个fifo队列(其他的还有lifo.priority队列,这里不再介绍).queue只有maxsize一个构造参数 ...
- python 队列实现_python中实现队列的queue模块
python中的queue模块提供了同步的.线程安全的队列类,包括FIFO(先进先出)的Queue类和LIFO(后进先出,栈结构)LifoQueue类和优先队列PriorityQueue类,它们都实现 ...
- python创建多线程_Python 多线程,threading模块,创建子线程的两种方式示例
本文实例讲述了Python 多线程,threading模块,创建子线程的两种方式.分享给大家供大家参考,具体如下: GIL(全局解释器锁)是C语言版本的Python解释器中专有的,GIL的存在让多线程 ...
- python多线程队列处理_Python线程和队列使用的一点思考
Python线程和队列使用的一点思考 1. 斗哥采访环节请问为什么要使用线程? 答:为了提高程序速度,代码效率呀. 请问为什么要使用队列? 答:个人认为队列可以保证线程安全,实现线程间的同步,比较稳. ...
- Python 多线程爬虫
多线程爬虫 有些时候,比如下载图片,因为下载图片是一个耗时的操作.如果采用之前那种同步的方式下载.那效率肯会特别慢.这时候我们就可以考虑使用多线程的方式来下载图片. 多线程介绍: 多线程是为了同步完成 ...
- 2019.1.12日 PYTHON多线程爬虫笔记
多线程爬虫 有些时候,比如下载图片,因为下载图片是一个耗时的操作.如果采用之前那种同步的方式下载.那效率肯会特别慢.这时候我们就可以考虑使用多线程的方式来下载图片. 多线程介绍: 多线程是为了同步完成 ...
最新文章
- 技术人生:与其鸟宿檐下,不如击翅风雨
- PMcaff大讲堂:竞品分析项目管理课程总结分享
- 赋能‘元宇宙’,这些企业强势破圈 | 2021AI 最佳成长榜
- 联想T460 Win10下“系统中断”CPU占用率高的解决办法
- JS 清空table
- 位域 bit-fields C的重要数据结构
- 「拥抱开源, 又见 .NET」系列第三次线下活动简报
- [Swagger2]配置Swagger
- php bean,php框架Phpbean说明
- 拉氏变换及复域传递函数
- 懒癌晚期学图论的时候自己用C语言写了个求可达性矩阵的算法~
- c++工作笔记001---c++相关零碎要点_endl、“\n”和‘\n’区别_extern int a关键字_-的意思_::的意思_指针和引用的区别
- 2022年华为笔试面试机考真题100道(C/C++语言)
- unity for 易接IOSsdk
- Python中机器学习模型的几种保存方式
- [项目分享]JSP+Servlet+JDBC实现的shine网上书城
- “金三银四“,敢不敢“试”?
- 天耀18期 - 12.数据结构-1-2.LinkedList【作业】-猜数字.doc
- 4.9-4.10 矩阵乘法的性质 矩阵的幂运算 矩阵的转置及其性质
- PyCharm中文版(无需汉化包,一键设置)
热门文章
- 2022-2028年中国侧线油行业市场研究及前瞻分析报告
- Python+OpenCV 图像处理系列(7)—— 图像色彩空间及转换
- Python中re的match、search、findall、finditer区别正则
- OP_REQUIRES failed at conv_ops.cc:386 : Resource exhausted: OOM when allocating tensor with shape..
- 聊一聊Spring中的线程安全性
- JDBC简单操作步骤总结
- LeetCode简单题之有序数组的平方
- OpenCL框架与示例
- 双精度张量内核加快了高性能计算
- 适用于AMD ROC GPU的Numba概述