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 json模块使用实例
Apr 11 Python
Python字符串匹配算法KMP实例
Jul 18 Python
利用Python实现命令行版的火车票查看器
Aug 05 Python
python中的文件打开与关闭操作命令介绍
Apr 26 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
May 16 Python
jenkins配置python脚本定时任务过程图解
Oct 29 Python
如何用OpenCV -python3实现视频物体追踪
Dec 04 Python
解决python gdal投影坐标系转换的问题
Jan 17 Python
TensorFlow tensor的拼接实例
Jan 19 Python
使用wxpy实现自动发送微信消息功能
Feb 28 Python
Python利用matplotlib绘制散点图的新手教程
Nov 05 Python
python操作toml文件的示例代码
Nov 27 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
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
php之readdir函数用法实例
2014/11/13 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
2016/01/18 PHP
PHP截取发动短信内容的方法
2017/07/04 PHP
PDO::setAttribute讲解
2019/01/29 PHP
JavaScript更改class和id的方法
2008/10/10 Javascript
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
JavaScript判断textarea值是否为空并给出相应提示
2014/09/04 Javascript
jQuery背景插件backstretch使用指南
2015/04/21 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
2017/08/10 Javascript
jquery 键盘事件的使用方法详解
2017/09/13 jQuery
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
微信小程序基于canvas渐变实现的彩虹效果示例
2019/05/03 Javascript
实例分析JS中的相等性判断===、 ==和Object.is()
2019/11/17 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
python WindowsError的错误代码详解
2017/07/23 Python
Python二进制串转换为通用字符串的方法
2018/07/23 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
python获取Pandas列名的几种方法
2019/08/07 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
python实现简单颜色识别程序
2020/02/19 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
Python识别验证码的实现示例
2020/09/30 Python
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
Ted Baker英国官网:男士和女士服装及配件
2017/03/13 全球购物
小狗电器官方商城:中国高端吸尘器品牌
2017/03/29 全球购物
微观物理专业自荐信
2014/01/26 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
打架检讨书
2015/01/27 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
亮剑观后感300字
2015/06/05 职场文书
个人合作协议范本
2015/08/06 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书