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小技巧分享
Nov 22 Python
Python实现递归遍历文件夹并删除文件
Apr 18 Python
Python 3实战爬虫之爬取京东图书的图片详解
Oct 09 Python
python 限制函数调用次数的实例讲解
Apr 21 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
May 13 Python
python基于json文件实现的gearman任务自动重启代码实例
Aug 13 Python
Django 自定义404 500等错误页面的实现
Mar 08 Python
Python 如何批量更新已安装的库
May 26 Python
Python类及获取对象属性方法解析
Jun 15 Python
快速了解Python开发环境Spyder
Jun 29 Python
python爬取youtube视频的示例代码
Mar 03 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
May 13 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
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
PHP安全防范技巧分享
2011/11/03 PHP
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
基于mootools 1.3框架下的图片滑动效果代码
2011/04/22 Javascript
javascript中cookie对象用法实例分析
2015/01/30 Javascript
EasyUI中实现form表单提交的示例分享
2015/03/01 Javascript
简单理解vue中实例属性vm.$els
2016/12/01 Javascript
简单理解js的冒泡排序
2016/12/19 Javascript
如何利用JQuery实现从底部回到顶部的功能
2016/12/27 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
2018/02/28 Javascript
微信小程序列表时间戳转换实现过程解析
2019/10/12 Javascript
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
python使用multiprocessing模块实现带回调函数的异步调用方法
2015/04/18 Python
python利用正则表达式提取字符串
2016/12/08 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
使用python实现knn算法
2017/12/20 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
python DataFrame 取差集实例
2019/01/30 Python
python cumsum函数的具体使用
2019/07/29 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
2019/08/23 Python
python文件操作的简单方法总结
2019/11/07 Python
简单了解django处理跨域请求最佳解决方案
2020/03/25 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
简述你对Statement,PreparedStatement,CallableStatement的理解
2013/03/25 面试题
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
20年同学聚会感言
2014/02/03 职场文书
大学生村官承诺书
2014/03/28 职场文书
4s店活动策划方案
2014/08/25 职场文书
实习单位指导教师评语
2014/12/30 职场文书
2015年质量月活动总结报告
2015/03/27 职场文书
干部外出学习心得体会
2016/01/18 职场文书
关于办理居住证的介绍信模板
2019/11/27 职场文书