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 错误和异常小结
Oct 09 Python
解读Django框架中的低层次缓存API
Jul 24 Python
在python中只选取列表中某一纵列的方法
Nov 28 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
利用Python进行图像的加法,图像混合(附代码)
Jul 14 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
Jan 08 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
Mar 02 Python
Android Q之气泡弹窗的实现示例
Jun 23 Python
Python 没有main函数的原因
Jul 10 Python
pycharm Tab键设置成4个空格的操作
Feb 26 Python
PYTHON使用Matplotlib去实现各种条形图的绘制
Mar 22 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
php 生成WML页面方法详解
2009/08/09 PHP
PHP 递归效率分析
2009/11/24 PHP
PHP中遍历stdclass object的实现代码
2011/06/09 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
PHP判断指定时间段的2个方法
2014/03/14 PHP
PHP编程中的常见漏洞和代码实例
2014/08/06 PHP
PHP CURL 内存泄露问题解决方法
2015/02/12 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
php删除数组中重复元素的方法
2015/12/22 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
2019/04/10 PHP
js下用eval生成JSON对象
2010/09/17 Javascript
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
2013/01/11 Javascript
深入理解$.each和$(selector).each
2016/05/15 Javascript
详解JavaScript中this关键字的用法
2016/05/26 Javascript
详解jQuery选择器
2016/12/21 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
Nodejs封装类似express框架的路由实例详解
2020/01/05 NodeJs
JavaScript中展开运算符及应用的实例代码
2021/01/14 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python根据出生日期返回年龄的方法
2015/03/26 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
2020/01/05 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
纯css3(无图片/js)制作的几个社交媒体网站的图标
2013/03/21 HTML / CSS
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
美国五金商店:Ace Hardware
2018/03/27 全球购物
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
数控专业个人求职信范例
2013/11/29 职场文书
《长江之歌》教学反思
2014/04/17 职场文书
二人合伙经营协议书
2014/09/13 职场文书
四年级学生期末评语
2014/12/26 职场文书
经理助理岗位职责
2015/02/02 职场文书
教育读书笔记
2015/07/02 职场文书
《自己去吧》教学反思
2016/02/16 职场文书