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中的defaultdict模块和namedtuple模块的简单入门指南
Apr 01 Python
在Python中通过threading模块定义和调用线程的方法
Jul 12 Python
Python中pandas dataframe删除一行或一列:drop函数详解
Jul 03 Python
Flask框架配置与调试操作示例
Jul 23 Python
对python制作自己的数据集实例讲解
Dec 12 Python
Python中的枚举类型示例介绍
Jan 09 Python
python利用跳板机ssh远程连接redis的方法
Feb 19 Python
python实现简单日期工具类
Apr 24 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
Django集成celery发送异步邮件实例
Dec 17 Python
Python实现一个简单的递归下降分析器
Aug 01 Python
python matlab库简单用法讲解
Dec 31 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
理解PHP5中static和const关键字的区别
2007/03/19 PHP
php 获得汉字拼音首字母的函数
2009/08/01 PHP
PHP swfupload图片上传的实例代码
2013/09/30 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
2016/03/25 PHP
php字符串操作针对负值的判断分析
2016/07/28 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
Yii框架中jquery表单验证插件用法示例
2016/10/18 PHP
利用php生成验证码
2017/02/23 PHP
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
js 设置缓存及获取设置的缓存
2014/05/08 Javascript
使用GruntJS构建Web程序之构建篇
2014/06/04 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
2017/10/19 jQuery
js实现图片推拉门效果代码实例
2019/05/18 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
基于vue+echarts 数据可视化大屏展示的方法示例
2020/03/09 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
[00:32]2018DOTA2亚洲邀请赛Mineski出场
2018/04/04 DOTA
使用python绘制常用的图表
2016/08/27 Python
详解Python传入参数的几种方法
2019/05/16 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
PyTorch中的Variable变量详解
2020/01/07 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
HTTP状态码详解
2021/03/18 杂记
使用CSS3来代替JS实现交互
2017/08/10 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
最新销售员个人自荐信
2013/09/21 职场文书
电子商务专业个人的自我评价分享
2013/10/29 职场文书
服装厂厂长职责
2013/12/16 职场文书
社会实践感言
2014/01/25 职场文书
小学语文课后反思精选
2014/04/25 职场文书
水电工程师岗位职责
2015/02/13 职场文书