码迷,mamicode.com
首页 > 编程语言 > 详细

python 线程中的局部变量ThreadLocal

时间:2018-03-03 23:30:17      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:绑定   adl   art   参数   一个   sch   get   mil   span   

一个线程使用自己的局部变量比使用全局变量好
局部变量只有线程自己能看见,不会影响其他线程
全局变量的修改必须加锁

ThreadLocal 线程局部变量

import threading

# 创建全局ThreadLocal对象:
local_school = threading.local()

def process_student():
# 获取当前线程关联的student:
std = local_school.student
print(‘Hello, %s (in %s)‘ % (std, threading.current_thread().name))

def process_thread(name):
# 绑定ThreadLocal的student:
local_school.student = name
process_student()


t1 = threading.Thread(target= process_thread, args=(‘Alice‘,), name=‘Thread-A‘)
t2 = threading.Thread(target= process_thread, args=(‘Bob‘,), name=‘Thread-B‘)
t1.start()
t2.start()
t1.join()
t2.join()

执行结果:

Hello, Alice (in Thread-A)
Hello, Bob (in Thread-B)


全局变量local_school就是一个ThreadLocal对象,
每个Thread对它都可以读写student属性,但互不影响。

可以把local_school看成全局变量,
但每个属性如local_school.student都是线程的局部变量,可以任意读写而互不干扰


可以理解为全局变量local_school是一个dict,不但可以用local_school.student,还可以绑定其他变量,如local_school.teacher等

ThreadLocal解决了参数在一个线程中各个函数之间互相传递的问题

python 线程中的局部变量ThreadLocal

标签:绑定   adl   art   参数   一个   sch   get   mil   span   

原文地址:https://www.cnblogs.com/wander-clouds/p/8477467.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!