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的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记第二十九节课

Linux学习笔记(二十九)日常运维一

[傅里叶变换及其应用学习笔记] 二十九. 高维Ш函数修改版

二十九PHP框架Laravel学习笔记——Debugbar 调试器

数学建模学习笔记(二十九)BP神经网络使用详例

模式识别(Pattern Recognition)学习笔记(二十九)--决策树的剪枝