python 线程中的局部变量ThreadLocal

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

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解决了参数在一个线程中各个函数之间互相传递的问题

posted @ 2018-03-03 22:32  夜游星  阅读(515)  评论(0编辑  收藏  举报