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的Flask框架结合MySQL写一个内存监控程序
Nov 07 Python
python中关于for循环的碎碎念
Jun 30 Python
Python使用win32 COM实现Excel的写入与保存功能示例
May 03 Python
使用python读取.text文件特定行的数据方法
Jan 28 Python
python基于pdfminer库提取pdf文字代码实例
Aug 15 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
Aug 29 Python
python实现在内存中读写str和二进制数据代码
Apr 24 Python
通俗易懂了解Python装饰器原理
Sep 17 Python
Selenium 配置启动项参数的方法
Dec 04 Python
全网最全python库selenium自动化使用详细教程
Jan 12 Python
手把手教你配置JupyterLab 环境的实现
Feb 02 Python
pandas DataFrame.shift()函数的具体使用
May 24 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实现多级树型菜单
2006/10/09 PHP
php为什么选mysql作为数据库? Mysql 创建用户方法
2007/07/02 PHP
php类常量的使用详解
2013/06/08 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
初识Laravel
2014/10/30 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
php制作基于xml的RSS订阅源功能示例
2017/02/08 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
javascript jQuery插件练习
2008/12/24 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
原生JS实现轮播效果+学前端的感受(防止走火入魔)
2016/08/21 Javascript
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
微信小程序websocket实现聊天功能
2020/03/30 Javascript
使用Nuxt.js改造已有项目的方法
2018/08/07 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
2018/11/14 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
javascript Canvas动态粒子连线
2020/01/01 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
2020/08/12 Javascript
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
python五子棋游戏的设计与实现
2019/06/18 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
Python实现微信好友的数据分析
2019/12/16 Python
实现Python与STM32通信方式
2019/12/18 Python
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
EJB面试题
2015/07/28 面试题
JVM是一个编译程序还是解释程序
2012/09/11 面试题
市场营销专业应届生自荐信
2014/06/19 职场文书
学习计划书怎么写
2014/09/15 职场文书
税务干部群众路线教育实践活动对照检查材料
2014/09/20 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
房屋产权证明书
2015/06/19 职场文书
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL