python 多线程 变量,python 多线程 全局变量
有个概念叫做线程局部变量,一般我们对多线程中的全局变量都会加锁处理,这种变量是共享变量,每个线程都可以读写变量,为了保持同步我们会做枷锁处理。
但是有些变量初始化以后,我们只想让他们在每个线程中一直存在,相当于一个线程内的共享变量,线程之间又是隔离的,就是局部变量。python threading模块中就提供了这么一个类,叫做local。(推荐学习:Python视频教程)
使用局部变量的时候,需要传递参数,比如有这样一个例子,程序需要处理客户申请,每来一个客户,就新开一个线程进行处理,而客户有姓名、年龄、性别等属性(参数),如果都需要传递参数的话很繁琐。Python提供了threading.local模块,方便我们实现线程局部变量的传递。直接看下面的例子:
# /usr/bin/env python
#编码:utf-8
导入线程
#线程。本地对象
ThreadLocalHelper=线程。本地()
锁=线程RLock()
类MyTheadEx(线程。螺纹):
def __init__(自身,线程名,姓名,年龄,性别):
超级(MyTheadEx,self).__init__(name=threadName)
自我. name _ _ name=name
自我。_ _年龄=年龄
自我。_ _性=性
定义运行(自身):
全局线程本地助手
ThreadLocalHelper .ThreadName=self.name
ThreadLocalHelper .名字=自我。_ _名称
ThreadLocalHelper .年龄=自身。_ _年龄
ThreadLocalHelper .性=自我。_ _性
MyTheadEx .ThreadPoc()
# 线程处理函数
@静态方法
def ThreadPoc():
lock.acquire()
尝试:
打印线程={id} .format(id=ThreadLocalHelper .线程名称)
打印Name={name} .format(name=ThreadLocalHelper .姓名)
打印"年龄={年龄}"。format(age=ThreadLocalHelper .年龄)
打印Sex={sex} .format(sex=ThreadLocalHelper .性)
打印-
最后:
lock.release()
if __name__==__main__:
Tom={Name: tom , Age: 20, Sex: man}
小花={ 姓名 : 小花,年龄 : 18,性别 : 女人 }
安迪={ 姓名 : 安迪,年龄 : 40,性别 : 男人 }
汤姆,小华,安迪
线程=[]
对于范围内的我(len(T)):
t=myheadex(threadName= id _ { 0 } .format(i),name=T[i][Name],age=T[i][Age],sex=T[i][Sex])
线程.追加
对于我加入范围(镜头(线程)):
线程[我].开始()
对于我加入范围(镜头(线程)):
线程[我].加入()
打印全部完成!可见,每个线程都可以对线程化。当地的对象进行读写,且互相不干扰。合理使用线程化。当地的可以极大简化代码逻辑,同时保证各个子线程的数据安全线程化. local最大的用处就是超文本传送协议请求时绑定用户的信息,这样每个用户线程可以非常方便访问各自的资源而互不干扰。
更多计算机编程语言相关技术文章,请访问计算机编程语言教程栏目进行学习!以上就是大蟒怎么定义线程局部变量的详细内容,更多请关注盛行信息技术软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。