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实现ping的方法
Jul 06 Python
python django 增删改查操作 数据库Mysql
Jul 27 Python
用python处理MS Word的实例讲解
May 08 Python
Python wxPython库消息对话框MessageDialog用法示例
Sep 03 Python
Python多叉树的构造及取出节点数据(treelib)的方法
Aug 09 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
python pygame实现挡板弹球游戏
Nov 25 Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
Dec 09 Python
Python3实现飞机大战游戏
Apr 24 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 Python
一文轻松掌握python语言命名规范规则
Jun 18 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
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
PHP获取网址的顶级域名函数代码
2012/09/24 PHP
PHP 获取文件权限函数介绍
2013/07/11 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
php使用fullcalendar日历插件详解
2019/03/06 PHP
JavaScript 创建对象
2009/07/17 Javascript
通过jQuery打造支持汉字,拼音,英文快速定位查询的超级select插件
2010/06/18 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
IE和Firefox之间在JavaScript语法上的差异
2016/04/22 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
2016/12/15 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
2017/01/12 Javascript
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
javascript防抖函数debounce详解
2019/06/11 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
简单了解Python中的几种函数
2017/11/03 Python
批量将ppt转换为pdf的Python代码 只要27行!
2018/02/26 Python
关于Python中定制类的比较运算实例
2019/12/19 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
python从Oracle读取数据生成图表
2020/10/14 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
世界领先的26岁以下学生和青少年旅行预订网站:StudentUniverse
2018/07/01 全球购物
车间机修工岗位职责
2014/02/28 职场文书
双方协议书
2014/04/22 职场文书
信息工作经验交流材料
2014/05/28 职场文书
上课迟到检讨书
2015/05/06 职场文书
婚庆主持词大全
2015/06/30 职场文书
《蚂蚁和蝈蝈》教学反思
2016/02/22 职场文书
检讨书怎么写?
2019/06/21 职场文书