python 线程中的局部变量ThreadLocal

Posted 夜游星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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解决了参数在一个线程中各个函数之间互相传递的问题





















以上是关于python 线程中的局部变量ThreadLocal的主要内容,如果未能解决你的问题,请参考以下文章

python 线程中的局部变量ThreadLocal

python线程中的全局变量与局部变量

ThreadLocal

ThreadLocal

Python中的threadlocal

ThreadLoca(二)Looper中ThreadLocal的使用