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实现PS图像明亮度调整效果示例
Jan 23 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
pytorch permute维度转换方法
Dec 14 Python
python 获取url中的参数列表实例
Dec 18 Python
Python循环中else,break和continue的用法实例详解
Jul 11 Python
python使用if语句实现一个猜拳游戏详解
Aug 27 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
Nov 01 Python
python模块hashlib(加密服务)知识点讲解
Nov 25 Python
手动安装python3.6的操作过程详解
Jan 13 Python
Windows下pycharm安装第三方库失败(通用解决方案)
Sep 17 Python
python Gabor滤波器讲解
Oct 26 Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 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+mysql分页代码详解
2008/03/27 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
PHP使用glob函数遍历目录或文件夹的方法
2014/12/16 PHP
php将文本文件转换csv输出的方法
2014/12/31 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
Extjs中DisplayField的日期或者数字格式化扩展
2010/09/03 Javascript
这段js代码得节约你多少时间
2011/12/20 Javascript
jquery随机展示头像代码
2011/12/21 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
javascript弹性运动效果简单实现方法
2016/01/08 Javascript
深入理解Node.js的HTTP模块
2016/10/12 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
简单易懂的python环境安装教程
2017/07/13 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
2017/08/25 Python
利用Python如何生成hash值示例详解
2017/12/20 Python
详谈在flask中使用jsonify和json.dumps的区别
2018/03/26 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
使用Keras构造简单的CNN网络实例
2020/06/29 Python
python中time、datetime模块的使用
2020/12/14 Python
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
.NET面试问题集
2015/12/08 面试题
斯福泰克软件测试面试题
2015/02/16 面试题
党性锻炼的心得体会
2014/09/03 职场文书
中秋节国旗下演讲稿
2014/09/05 职场文书
委托书格式要求
2015/01/28 职场文书
档案工作个人总结
2015/03/03 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android