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实现Linux命令xxd -i功能
Mar 06 Python
Windows安装Python、pip、easy_install的方法
Mar 05 Python
5款非常棒的Python工具
Jan 05 Python
python如何生成各种随机分布图
Aug 27 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
Nov 06 Python
python处理multipart/form-data的请求方法
Dec 26 Python
python协程gevent案例 爬取斗鱼图片过程解析
Aug 27 Python
详解Python3 pandas.merge用法
Sep 05 Python
PyCharm刷新项目(文件)目录的实现
Feb 14 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
Jul 13 Python
浅谈Python爬虫原理与数据抓取
Jul 21 Python
Python实现播放和录制声音的功能
Aug 12 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生成静态页面分析 模板+缓存+写文件
2009/08/17 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
Yii中特殊行为ActionFilter的使用方法示例
2020/10/18 PHP
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
jquery复选框多选赋值给文本框的方法
2015/01/27 Javascript
javascript操作符"!~"详解
2015/02/10 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
2016/11/07 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
jQuery实现鼠标移入显示蒙版效果
2020/01/11 jQuery
vue实现从外部修改组件内部的变量的值
2020/07/30 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
Python浅复制中对象生存周期实例分析
2018/04/02 Python
使用pycharm设置控制台不换行的操作方法
2019/01/19 Python
python issubclass 和 isinstance函数
2019/07/25 Python
numpy 声明空数组详解
2019/12/05 Python
python next()和iter()函数原理解析
2020/02/07 Python
python super函数使用方法详解
2020/02/14 Python
Python实现密钥密码(加解密)实例详解
2020/04/26 Python
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
巴西宠物店在线:Geração Pet
2017/05/31 全球购物
法拉利英国精品店:Ferraris Boutique UK
2019/07/20 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
升职自荐信范文
2013/10/05 职场文书
mysql创建存储过程及函数详解
2021/12/04 MySQL