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科学计算之Pandas详解
Jan 15 Python
Python 多进程并发操作中进程池Pool的实例
Nov 01 Python
python监控文件并且发送告警邮件
Jun 21 Python
Python实现端口检测的方法
Jul 24 Python
Python3爬虫使用Fidder实现APP爬取示例
Nov 27 Python
Python获取Redis所有Key以及内容的方法
Feb 19 Python
Win10 安装PyCharm2019.1.1(图文教程)
Sep 29 Python
python语音识别指南终极版(有这一篇足矣)
Sep 09 Python
Python join()函数原理及使用方法
Nov 14 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
Dec 08 Python
Python中文纠错的简单实现
Jul 07 Python
详解Python如何批量采集京东商品数据流程
Jan 22 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入门小知识
2008/03/24 PHP
Memcache 在PHP中的使用技巧
2010/02/08 PHP
用Simple Excel导出xls实现方法
2012/12/06 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
php生成短域名函数
2015/03/23 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
基于PHP实现发微博动态代码实例
2020/12/11 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
js 日期转换成中文格式的函数
2009/07/07 Javascript
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
jquery实现更改表格行顺序示例
2014/04/30 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
jquery根据一个值来选中select下的option实例代码
2016/08/29 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
js实现动态增加文件域表单功能
2018/10/22 Javascript
Python实现发送email的几种常用方法
2014/08/18 Python
Python多线程经典问题之乘客做公交车算法实例
2017/03/22 Python
Python实现字符串逆序输出功能示例
2017/06/24 Python
Python导入模块时遇到的错误分析
2017/08/30 Python
浅谈使用Python变量时要避免的3个错误
2017/10/30 Python
django限制匿名用户访问及重定向的方法实例
2018/02/07 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
在python中使用with打开多个文件的方法
2019/01/07 Python
python调用摄像头拍摄数据集
2019/06/01 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
Python的in,is和id函数代码实例
2020/04/18 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
香港网上花店:FlowerAdvisor香港
2019/05/30 全球购物
高三生物教学反思
2014/01/25 职场文书
和谐社区口号
2014/06/19 职场文书
工作推荐信模板
2015/03/25 职场文书