zoukankan      html  css  js  c++  java
  • 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请求,用户身份信息等,这样一个线程的所有调用到的处理函数都可以非常方便地访问这些资源

  • 相关阅读:
    leetcode Super Ugly Number
    leetcode Find Median from Data Stream
    leetcode Remove Invalid Parentheses
    leetcode Range Sum Query
    leetcode Range Sum Query
    leetcode Minimum Height Trees
    hdu 3836 Equivalent Sets
    hdu 1269 迷宫城堡
    hud 2586 How far away ?
    poj 1330 Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/douzujun/p/7440135.html
Copyright © 2011-2022 走看看