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多线程爬虫爬取电影天堂资源
Sep 23 Python
python实现冒泡排序算法的两种方法
Mar 10 Python
使用Python微信库itchat获得好友和群组已撤回的消息
Jun 24 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
Dec 28 Python
在pycharm 中添加运行参数的操作方法
Jan 19 Python
浅谈Python批处理文件夹中的txt文件
Mar 11 Python
简单了解python中的与或非运算
Sep 18 Python
Python利用Xpath选择器爬取京东网商品信息
Jun 01 Python
python中 _、__、__xx__()区别及使用场景
Jun 30 Python
python爬虫多次请求超时的几种重试方法(6种)
Dec 01 Python
Python学习之time模块的基本使用
Jan 17 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
mysql+php分页类(已测)
2008/03/31 PHP
PHP实现搜索相似图片
2015/09/22 PHP
PHP 裁剪图片
2021/03/09 PHP
在网页中控制wmplayer播放器
2006/07/01 Javascript
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
Bootstrap下拉菜单效果实例代码分享
2016/06/30 Javascript
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
Vue中"This dependency was not found"问题的解决方法
2018/06/19 Javascript
Vue2.0 v-for filter列表过滤功能的实现
2018/09/07 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
JavaScript实现简单进度条效果
2020/03/25 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
python将图片文件转换成base64编码的方法
2015/03/14 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
理解python中生成器用法
2017/12/20 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
英国大码女性时装零售商:Evans
2018/08/29 全球购物
Prototype如何更新局部页面
2013/03/03 面试题
应用化学专业本科生求职信
2013/09/29 职场文书
应征英语教师求职信
2013/11/27 职场文书
医院实习介绍信
2014/01/12 职场文书
亲子读书活动方案
2014/02/22 职场文书
食品安全承诺书
2014/05/22 职场文书
调研汇报材料范文
2014/08/17 职场文书
股权转让协议书
2014/12/07 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
2016中秋节广告语
2016/01/28 职场文书
对Golang中的FORM相关字段理解
2021/05/02 Golang
详解Java实现数据结构之并查集
2021/06/23 Java/Android
Python中requests库的用法详解
2022/06/05 Python