Python学习笔记(二十九)ThreadLocal
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习笔记(二十九)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=(‘Douzi‘, ), name=‘Thread-A‘)
t2 = threading.Thread(target=process_thread, args=(‘Douzi2‘, ), name=‘Thread-B‘)
t1.start()
t2.start()
t1.join()
t2.join()
Hello, Douzi (in Thread-A)
Hello, Douzi2 (in Thread-B)
全局变量local_school
就是一个ThreadLocal
对象,每个Thread
对它都可以读写student
属性,但互不影响。你可以把local_school
看成全局变量,但每个属性如local_school.student
都是线程的局部变量,可以任意读写而互不干扰,也不用管理锁的问题,ThreadLocal
内部会处理。
可以理解为全局变量local_school
是一个dict
,不但可以用local_school.student
,还可以绑定其他变量,如local_school.teacher
等等。
ThreadLocal
最常用的地方就是为每个线程绑定一个数据库连接,HTTP请求,用户身份信息等,这样一个线程的所有调用到的处理函数都可以非常方便地访问这些资源。
以上是关于Python学习笔记(二十九)ThreadLocal的主要内容,如果未能解决你的问题,请参考以下文章