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 open读写文件实现脚本
Sep 06 Python
Python对两个有序列表进行合并和排序的例子
Jun 13 Python
python根据出生日期获得年龄的方法
Mar 31 Python
20个常用Python运维库和模块
Feb 12 Python
python通过TimedRotatingFileHandler按时间切割日志
Jul 17 Python
Django 全局的static和templates的使用详解
Jul 19 Python
python多线程同步之文件读写控制
Feb 25 Python
Python使用Slider组件实现调整曲线参数功能示例
Sep 06 Python
Python的对象传递与Copy函数使用详解
Dec 26 Python
用python拟合等角螺线的实现示例
Dec 27 Python
Python sqlite3查询操作过程解析
Feb 20 Python
Python IO文件管理的具体使用
Mar 20 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中调用JAVA
2006/10/09 PHP
php上传excel表格并获取数据
2017/04/27 PHP
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
javascript的 {} 语句块详解
2016/02/27 Javascript
JS在浏览器中解析Base64编码图像
2017/02/09 Javascript
原生js轮播特效
2017/05/18 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
Vue 全家桶实现移动端酷狗音乐功能
2018/11/16 Javascript
小程序实现抽奖动画
2020/04/16 Javascript
Vue插件从封装到发布的完整步骤记录
2019/02/28 Javascript
layui动态表头的实现代码
2019/08/22 Javascript
基于postman获取动态数据过程详解
2020/09/08 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
Python中音频处理库pydub的使用教程
2017/06/07 Python
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
Django框架视图介绍与使用详解
2019/07/18 Python
Python模块future用法原理详解
2020/01/20 Python
django 将自带的数据库sqlite3改成mysql实例
2020/07/09 Python
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
eBay比利时购物网站:eBay.be
2019/08/09 全球购物
.net工程师笔试题
2012/06/09 面试题
C#怎么让一个窗口居中显示?
2015/10/20 面试题
医学生自我评价
2014/01/27 职场文书
幼儿园教师教学反思
2014/02/06 职场文书
服务理念标语
2014/06/18 职场文书
体育课外活动总结
2014/07/08 职场文书
班子四风对照检查材料思想汇报
2014/09/29 职场文书
党支部半年考察意见
2015/06/01 职场文书
暑期辅导班宣传单
2015/07/14 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS
mysql部分操作
2021/04/05 MySQL