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 相关文章推荐
写了个监控nginx进程的Python脚本
May 10 Python
Python实现测试磁盘性能的方法
Mar 12 Python
详解使用Python处理文件目录的相关方法
Oct 16 Python
使用Python中的tkinter模块作图的方法
Feb 07 Python
python获取指定时间差的时间实例详解
Apr 11 Python
Python iter()函数用法实例分析
Mar 17 Python
Python @property原理解析和用法实例
Feb 11 Python
python实现的分层随机抽样案例
Feb 25 Python
Python中SQLite如何使用
May 27 Python
Python实时监控网站浏览记录实现过程详解
Jul 14 Python
Python 恐龙跑跑小游戏实现流程
Feb 15 Python
4种方法python批量修改替换列表中元素
Apr 07 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
mysql5写入和读出乱码解决
2006/11/25 PHP
Mysql中分页查询的两个解决方法比较
2013/05/02 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
js实现照片墙功能实例
2015/02/05 Javascript
js+css实现导航效果实例
2015/02/10 Javascript
Jquery Mobile 自定义按钮图标
2015/11/18 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
2015/12/23 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
利用vue写todolist单页应用
2016/12/15 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
2017/02/09 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
2017/08/17 Javascript
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
JS数组方法push()、pop()用法实例分析
2020/01/18 Javascript
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
破解安装Pycharm的方法
2018/10/19 Python
选择python进行数据分析的理由和优势
2019/06/25 Python
PyCharm2019 安装和配置教程详解附激活码
2020/07/31 Python
实例讲解CSS3中的box-flex弹性盒属性布局
2016/06/09 HTML / CSS
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
领导的自我鉴定
2013/12/28 职场文书
毕业生自荐书
2014/02/03 职场文书
管事部库房保管员岗位职责
2014/02/21 职场文书
团支部建设方案
2014/05/02 职场文书
文体活动总结范文
2014/05/05 职场文书
个人自荐材料
2014/05/23 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers