Python多线程编程(一):threading模块综述


Posted in Python onApril 05, 2015

Python这门解释性语言也有专门的线程模型,Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,但暂时无法利用多处理器的优势。在Python中我们主要是通过thread和 threading这两个模块来实现的,其中Python的threading模块是对thread做了一些包装的,可以更加方便的被使用,所以我们使用 threading模块实现多线程编程。这篇文章我们主要来看看Python对多线程编程的支持。

在语言层面,Python对多线程提供了很好的支持,可以方便地支持创建线程、互斥锁、信号量、同步等特性。下面就是官网上介绍threading模块的基本资料及功能:

实现模块

thread:多线程的底层支持模块,一般不建议使用;
threading:对thread进行了封装,将一些线程的操作对象化。

threading模块

Thread 线程类,这是我们用的最多的一个类,你可以指定线程函数执行或者继承自它都可以实现子线程功能;

Timer与Thread类似,但要等待一段时间后才开始运行;
Lock 锁原语,这个我们可以对全局变量互斥时使用;
RLock 可重入锁,使单线程可以再次获得已经获得的锁;
Condition 条件变量,能让一个线程停下来,等待其他线程满足某个“条件”;
Event 通用的条件变量。多个线程可以等待某个事件发生,在事件发生后,所有的线程都被激活;
Semaphore为等待锁的线程提供一个类似“等候室”的结构;
BoundedSemaphore 与semaphore类似,但不允许超过初始值;
Queue:实现了多生产者(Producer)、多消费者(Consumer)的队列,支持锁原语,能够在多个线程之间提供很好的同步支持。

Thread类

是你主要的线程类,可以创建进程实例。该类提供的函数包括:
getName(self) 返回线程的名字
isAlive(self) 布尔标志,表示这个线程是否还在运行中
isDaemon(self) 返回线程的daemon标志
join(self, timeout=None) 程序挂起,直到线程结束,如果给出timeout,则最多阻塞timeout秒
run(self) 定义线程的功能函数
setDaemon(self, daemonic) 把线程的daemon标志设为daemonic
setName(self, name) 设置线程的名字
start(self) 开始线程执行

Queue提供的类

Queue队列
LifoQueue后入先出(LIFO)队列
PriorityQueue 优先队列

接下来

接下来的一系列文章,将会用一个一个示例来展示threading的各个功能,包括但不限于:两种方式起线程、threading.Thread类的重要函数、使用Lock互斥及RLock实现重入锁、使用Condition实现生产者和消费者模型、使用Event和Semaphore多线程通信。

Python 相关文章推荐
Python 字符串中的字符倒转
Sep 06 Python
python和shell实现的校验IP地址合法性脚本分享
Oct 23 Python
python利用不到一百行代码实现一个小siri
Mar 02 Python
Python tkinter label 更新方法
Oct 11 Python
用Python编写一个简单的CS架构后门的方法
Nov 20 Python
解决python测试opencv时imread导致的错误问题
Jan 26 Python
python3人脸识别的两种方法
Apr 25 Python
Python imread、newaxis用法详解
Nov 04 Python
Python监控服务器实用工具psutil使用解析
Dec 19 Python
PIP和conda 更换国内安装源的方法步骤
Sep 21 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
Oct 26 Python
python 实现有道翻译功能
Feb 26 Python
Python中使用dom模块生成XML文件示例
Apr 05 #Python
Python中比较特别的除法运算和幂运算介绍
Apr 05 #Python
Python中使用logging模块打印log日志详解
Apr 05 #Python
Python中的两个内置模块介绍
Apr 05 #Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
Apr 05 #Python
Python中使用第三方库xlrd来写入Excel文件示例
Apr 05 #Python
Python中使用第三方库xlrd来读取Excel示例
Apr 05 #Python
You might like
ie与session丢失(新窗口cookie丢失)实测及解决方案
2013/07/15 PHP
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
php阿拉伯数字转中文人民币大写
2015/12/21 PHP
JavaScript根据数据生成百分比图和柱状图的实例代码
2013/07/14 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
2016/12/14 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
2017/02/14 Javascript
javascript 日期相减-在线教程(附代码)
2017/08/17 Javascript
js处理包含中文的字符串实例
2017/10/11 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
python列表操作使用示例分享
2014/02/21 Python
python计算方程式根的方法
2015/05/07 Python
python利用datetime模块计算时间差
2015/08/04 Python
Python基于jieba库进行简单分词及词云功能实现方法
2018/06/16 Python
详解Python传入参数的几种方法
2019/05/16 Python
Django通过dwebsocket实现websocket的例子
2019/11/15 Python
python 解决flask 图片在线浏览或者直接下载的问题
2020/01/09 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
Python3使用 GitLab API 进行批量合并分支
2020/10/15 Python
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
大三预备党员入党思想汇报
2014/01/08 职场文书
函授本科自我鉴定
2014/02/04 职场文书
学校安全生产月活动总结
2014/07/05 职场文书
党员一帮一活动总结
2014/07/08 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
如何写股份合作协议书
2014/09/11 职场文书
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
期末复习计划
2015/01/19 职场文书
坎儿井导游词
2015/02/09 职场文书
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python