Python threading.local代码实例及原理解析


Posted in Python onMarch 16, 2020

Python的线程操作在旧版本中使用的是thread模块,在Python27和Python3中引入了threading模块,同时thread模块在Python3中改名为_thread模块,threading模块相较于thread模块,对于线程的操作更加的丰富,而且threading模块本身也是相当于对thread模块的进一步封装而成,thread模块有的功能threading模块也都有,所以涉及到对线程的操作,推荐使用threading模块。

threading模块中包含了关于线程操作的丰富功能,包括:常用线程函数,线程对象,锁对象,递归锁对象,事件对象,条件变量对象,信号量对象,定时器对象,栅栏对象。代码如下

#coding = utf - 8
import threading# 创建全局ThreadLocal对象:
	localVal = threading.local()
localVal.val = "Main-Thread"
def process_student():
	print '%s (in %s)' % (localVal.val,
		threading.current_thread().name)
def process_thread(name): #赋值
localVal.val = name
process_student()
t1 = threading.Thread(target =
	process_thread, args = ('One', ),
	name = 'Thread-A')
t2 = threading.Thread(target =
	process_thread, args = ('Two', ),
	name = 'Thread-B')
t1.start()
t2.start()
t1.join()
t2.join()
print localVal.val

打印结果:

One (in Thread-A)
Two (in Thread-B)
Main-Thread

threading.local()这个方法的特点用来保存一个全局变量,但是这个全局变量只有在当前线程才能访问,

localVal.val = name这条语句可以储存一个变量到当前线程,如果在另外一个线程里面再次对localVal.val进行赋值,

那么会在另外一个线程单独创建内存空间来存储,也就是说在不同的线程里面赋值 不会覆盖之前的值,因为每个

线程里面都有一个单独的空间来保存这个数据,而且这个数据是隔离的,其他线程无法访问

这个东西可以用在那些地方呢,比如下载,现在都是多线程下载了,就像酷狗那样,可以同时下载很多首歌曲,那么

就可以利用这个方法来保存每个下载线程的数据,比如下载进度,下载速度之类的

所以 如果你在开发多线程应用的时候 需要每个线程保存一个单独的数据供当前线程操作,可以考虑使用这个方法,简单有效

其实这样的功能还有很多种方法可以实现,比如我们在主线程实例化一个dict对象,然后用线程的名字作为key,因为线程之间可以共享数据,

所以也可以实现相同功能,并且灵活性更多,不过代码就没那么优雅简洁了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的人工神经网络算法示例【基于反向传播算法】
Nov 11 Python
学习Python selenium自动化网页抓取器
Jan 20 Python
python实现超市扫码仪计费
May 30 Python
无法使用pip命令安装python第三方库的原因及解决方法
Jun 12 Python
对python requests的content和text方法的区别详解
Oct 11 Python
python 文件查找及内容匹配方法
Oct 25 Python
详解python中的Turtle函数库
Nov 19 Python
把vgg-face.mat权重迁移到pytorch模型示例
Dec 27 Python
python 识别登录验证码图片功能的实现代码(完整代码)
Jul 03 Python
pandas apply多线程实现代码
Aug 17 Python
celery在python爬虫中定时操作实例讲解
Nov 27 Python
Django分页器的用法你都了解吗
May 26 Python
python实现ssh及sftp功能(实例代码)
Mar 16 #Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
Mar 16 #Python
Django ValuesQuerySet转json方式
Mar 16 #Python
Django 再谈一谈json序列化
Mar 16 #Python
django实现将后台model对象转换成json对象并传递给前端jquery
Mar 16 #Python
Python读写操作csv和excle文件代码实例
Mar 16 #Python
django模型动态修改参数,增加 filter 字段的方式
Mar 16 #Python
You might like
Adodb的十个实例(清晰版)
2006/12/31 PHP
PHP 删除一个目录及目录下的所有文件的函数代码
2010/05/26 PHP
Apache2中实现多网站域名绑定的实现方法
2011/06/01 PHP
php查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
JavaScript 判断浏览器类型及版本
2009/02/21 Javascript
javascript 面向对象思想 附源码
2009/07/07 Javascript
基于jQuery的表格操作插件
2010/04/22 Javascript
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
Javascript浅谈之引用类型
2013/12/18 Javascript
js获取鼠标点击的位置实现思路及代码
2014/05/09 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
2015/03/03 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
2015/06/24 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
Python实现去除代码前行号的方法
2015/03/10 Python
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
在python中以相同顺序shuffle两个list的方法
2018/12/13 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
tensorflow2.0保存和恢复模型3种方法
2020/02/03 Python
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
小学国庆节活动方案
2014/02/11 职场文书
英文推荐信格式范文
2014/05/09 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
Java线程的6种状态与生命周期
2022/05/11 Java/Android