python 多线程 变量,python 多线程 全局变量

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: