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使用reportlab将目录下所有的文本文件打印成pdf的方法
May 20 Python
Python操作Excel之xlsx文件
Mar 24 Python
详解python并发获取snmp信息及性能测试
Mar 27 Python
numpy数组拼接简单示例
Dec 15 Python
对Tensorflow中的变量初始化函数详解
Jul 27 Python
python文件操作之批量修改文件后缀名的方法
Aug 10 Python
python 使用plt画图,去除图片四周的白边方法
Jul 09 Python
python实现中文文本分句的例子
Jul 15 Python
wxPython实现绘图小例子
Nov 19 Python
python中如何使用insert函数
Jan 09 Python
python3连接MySQL8.0的两种方式
Feb 17 Python
Django显示可视化图表的实践
May 10 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
IIS下PHP的三种配置方式对比
2014/11/20 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
PHP实现Unicode编码相互转换的方法示例
2020/11/17 PHP
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
Extjs4 GridPanel 的几种样式使用介绍
2013/04/18 Javascript
javascript实现禁止复制网页内容
2014/12/16 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
Javascript基础教程之比较null和undefined值
2016/05/16 Javascript
js多功能分页组件layPage使用方法详解
2016/05/19 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
javascript笔记之匿名函数和闭包
2017/02/06 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
2017/03/07 Javascript
vue.js开发环境安装教程
2017/03/17 Javascript
jQuery实现的鼠标响应缓冲动画效果示例
2018/02/13 jQuery
微信小程序使用wxParse解析html的方法教程
2018/07/06 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
vue使用video.js进行视频播放功能
2019/07/18 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
2019/09/10 Javascript
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
python正则表达式re模块详细介绍
2014/05/29 Python
简介Django框架中可使用的各类缓存
2015/07/23 Python
Python中多线程的创建及基本调用方法
2016/07/08 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
python 弹窗提示警告框MessageBox的实例
2019/06/18 Python
Python 使用list和tuple+条件判断详解
2019/07/30 Python
YSL Beauty加拿大官方商城:圣罗兰美妆加拿大
2017/05/15 全球购物
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
2012/06/02 面试题
书法兴趣小组活动总结
2014/07/07 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
六一领导慰问欢迎词
2015/01/26 职场文书
教师节慰问信
2015/02/15 职场文书
Python实现byte转integer
2021/06/03 Python
Spring中bean的生命周期之getSingleton方法
2021/06/30 Java/Android
vue3不同环境下实现配置代理
2022/05/25 Vue.js