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程序实例(通讯录)
Nov 29 Python
用Python的Tornado框架结合memcached页面改善博客性能
Apr 24 Python
名片管理系统python版
Jan 11 Python
Flask框架各种常见装饰器示例
Jul 17 Python
python画一个玫瑰和一个爱心
Aug 18 Python
uwsgi+nginx部署Django项目操作示例
Dec 04 Python
Python queue队列原理与应用案例分析
Sep 27 Python
python pyinstaller打包exe报错的解决方法
Nov 02 Python
wxPython实现列表增删改查功能
Nov 19 Python
Python QT组件库qtwidgets的使用
Nov 02 Python
Python 数据可视化之Matplotlib详解
Nov 02 Python
使用python创建股票的时间序列可视化分析
Mar 03 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
基于文本的访客签到簿
2006/10/09 PHP
php面向对象的方法重载两种版本比较
2008/09/08 PHP
php学习笔记 数组遍历实现代码
2011/06/09 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
JavaScript实战(原生range和自定义特效)简单实例
2016/08/21 Javascript
基于JavaScript实现无限加载瀑布流
2017/07/21 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
2017/10/30 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
在vue项目中引用Iview的方法
2018/09/14 Javascript
详解ES6系列之私有变量的实现
2018/11/21 Javascript
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
用Python代码来绘制彭罗斯点阵的教程
2015/04/03 Python
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
利用Python实现图书超期提醒
2016/08/02 Python
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
用Django实现一个可运行的区块链应用
2018/03/08 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
在django admin中添加自定义视图的例子
2019/07/26 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
python字符串的拼接方法总结
2019/11/18 Python
python getopt模块使用实例解析
2019/12/18 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
2020/10/12 Python
SQL Server面试题
2013/04/04 面试题
计算机软件个人的自荐信范文
2013/12/01 职场文书
党员党性分析材料
2014/02/17 职场文书
走群众路线剖析材料
2014/10/09 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书
中学音乐课教学反思
2016/02/18 职场文书
2016年党员干部公开承诺书
2016/03/24 职场文书
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers