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 Deque 模块使用详解
Jul 04 Python
理解Python中的With语句
Feb 02 Python
Python selenium 三种等待方式解读
Sep 15 Python
利用pandas进行大文件计数处理的方法
Jul 25 Python
python pyheatmap包绘制热力图
Nov 09 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
Apr 01 Python
浅析PEP570新语法: 只接受位置参数
Oct 15 Python
Python定义函数时参数有默认值问题解决
Dec 19 Python
python获取网络图片方法及整理过程详解
Dec 20 Python
Django中文件上传和文件访问微项目的方法
Apr 27 Python
解决Python Matplotlib绘图数据点位置错乱问题
May 16 Python
Python新手学习装饰器
Jun 04 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
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
ThinkPHP的常用配置选项汇总
2016/03/24 PHP
javascript类继承机制的原理分析
2009/09/12 Javascript
JS 控制非法字符的输入代码
2009/12/04 Javascript
js 蒙版进度条(结合图片)
2010/03/10 Javascript
从零开始学习jQuery (二) 万能的选择器
2010/10/01 Javascript
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
nodejs教程之入门
2014/11/21 NodeJs
jQuery插件scroll实现无缝滚动效果
2015/04/27 Javascript
深入理解bootstrap框架之第二章整体架构
2016/10/09 Javascript
js制作简单的音乐播放器的示例代码
2017/08/28 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
2018/11/20 jQuery
Javascript的this详解
2019/03/23 Javascript
微信小程序基于Taro的分享图片功能实践详解
2019/07/12 Javascript
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
如何实现js拖拽效果及原理解析
2020/05/08 Javascript
[01:08]DOTA2次级职业联赛 - Wings 战队宣传片
2014/12/01 DOTA
python pickle 和 shelve模块的用法
2013/09/16 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
哪些是python中web开发框架
2020/06/17 Python
Tensorflow与Keras自适应使用显存方式
2020/06/22 Python
CSS3中文字镂空、透明值、阴影效果设置示例小结
2016/03/07 HTML / CSS
毕业生自荐信格式
2014/03/07 职场文书
电气自动化求职信
2014/06/24 职场文书
平面设计师岗位职责
2014/09/18 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
社区党支部公开承诺书
2015/04/29 职场文书
Windows环境下实现批量执行Sql文件
2021/10/05 SQL Server
java executor包参数处理功能 
2022/02/15 Java/Android
Elasticsearch 索引操作和增删改查
2022/04/19 Python