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基础语法(Python基础知识点)
Feb 28 Python
Python封装原理与实现方法详解
Aug 28 Python
python向字符串中添加元素的实例方法
Jun 28 Python
PyQt Qt Designer工具的布局管理详解
Aug 07 Python
python matplotlib饼状图参数及用法解析
Nov 04 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
Dec 20 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
Feb 06 Python
Python图像处理库PIL中图像格式转换的实现
Feb 26 Python
Python编程快速上手——Excel表格创建乘法表案例分析
Feb 28 Python
Python多线程Threading、子线程与守护线程实例详解
Mar 24 Python
Python中使用filter过滤列表的一个小技巧分享
May 02 Python
Python configparser模块操作代码实例
Jun 08 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 动态随机生成验证码类代码
2010/04/09 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
2016/03/14 PHP
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
用JS剩余字数计算的代码
2008/07/03 Javascript
javascript不同页面传值的改进版
2008/09/30 Javascript
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
js DOM的学习笔记
2011/12/22 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
jQuery弹出层插件popShow用法示例
2017/01/23 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
2017/07/12 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
2018/01/02 jQuery
JS实现选项卡效果的代码实例
2019/05/20 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
2019/07/13 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
2020/02/15 Javascript
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
让 python 命令行也可以自动补全
2014/11/30 Python
Python调用C++程序的方法详解
2017/01/24 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
解决python3 pika之连接断开的问题
2018/12/18 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
Python API len函数操作过程解析
2020/03/05 Python
Python内置方法和属性应用:反射和单例(推荐)
2020/06/19 Python
解析python 中/ 和 % 和 //(地板除)
2020/06/28 Python
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
企业演讲稿范文大全
2014/05/20 职场文书
企业领导班子四风对照检查材料
2014/09/27 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
Golang使用Panic与Recover进行错误捕获
2022/03/22 Golang
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers