ThreadLocal最常用的地方就是为每个线程绑定一个数据库连接,HTTP请求,用户身份信息等,这样一个线程的所有调用到的处理函数都可以非常方便地访问这些资源。
一个ThreadLocal变量虽然是全局变量,但每个线程都只能读写自己线程的独立副本,互不干扰。ThreadLocal解决了参数在一个线程中各个函数之间互相传递的问题
import threading # 创建全局ThreadLocal对象: local_school=threading.local() def process_student(): # 将全局下属性为st的数据赋值给std # 获取当前线程关联的st: std=local_school.st print('Hello, %s (in %s)' % (std, threading.current_thread().name)) def process_thread(*name): # local_school.st表示local_school下的属性st:将传入的参数赋给此属性 # 绑定ThreadLocal的st: local_school.st=name process_student() # 创建两个线程 # 属性name是给该线程标明名字,传入*name表示args参数内容 t1=threading.Thread(target=process_thread,args=('123','ailun','xuehao'),name=('qq',)) t2=threading.Thread(target=process_thread,args=('456',),name='weixin') t1.start() t2.start() t1.join() t2.join()