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中遇到的小问题及解决方法汇总
Jan 11 Python
Python实现的科学计算器功能示例
Aug 04 Python
Python实现自动上京东抢手机
Feb 06 Python
Python实现的三层BP神经网络算法示例
Feb 07 Python
django允许外部访问的实例讲解
May 14 Python
实例讲解python中的序列化知识点
Oct 08 Python
python在openstreetmap地图上绘制路线图的实现
Jul 11 Python
Python使用Pandas对csv文件进行数据处理的方法
Aug 01 Python
python中从for循环延申到推导式的具体使用
Nov 29 Python
Python动态导入模块和反射机制详解
Feb 18 Python
如何对python的字典进行排序
Jun 19 Python
python中sys模块的介绍与实例
Apr 17 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
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
laravel5.6实现数值转换
2019/10/23 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
PHP实现新型冠状病毒疫情实时图的实例
2020/02/04 PHP
prototype 的说明 js类
2006/09/07 Javascript
Javascript验证上传图片大小[前台处理]
2014/07/18 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
2016/08/11 Javascript
jQuery validate插件功能与用法详解
2016/12/15 Javascript
vue生命周期和react生命周期对比【推荐】
2018/09/19 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
在Vue中创建可重用的 Transition的方法
2020/06/02 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
2020/07/13 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
python网络爬虫采集联想词示例
2014/02/11 Python
python使用cookielib库示例分享
2014/03/03 Python
Python入门之modf()方法的使用
2015/05/15 Python
python妹子图简单爬虫实例
2015/07/07 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
Python面向对象之类的内置attr属性示例
2018/12/14 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
2020/03/08 Python
深入浅析python 中的self和cls的区别
2020/06/20 Python
Python Tornado核心及相关原理详解
2020/06/24 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
韩都衣舍天猫官方旗舰店:天猫女装销售总冠军
2017/10/10 全球购物
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
搞笑征婚广告词
2014/03/17 职场文书
2014年师德师风自我剖析材料
2014/09/27 职场文书
统计员岗位职责范本
2015/04/14 职场文书
卡特教练观后感
2015/06/08 职场文书
运动会宣传稿50字
2015/07/23 职场文书
python基于tkinter实现gif录屏功能
2021/05/19 Python
python使用BeautifulSoup 解析HTML
2022/04/24 Python
vue实现在data里引入相对路径
2022/06/05 Vue.js