zoukankan      html  css  js  c++  java
  • THREADING.LOCAL的作用?

    threading.local()这个方法的特点用来保存一个全局变量,但是这个全局变量只有在当前线程才能访问,如果你在开发多线程应用的时候  需要每个线程保存一个单独的数据供当前线程操作,可以考虑使用这个方法,简单有效。举例:每个子线程使用全局对象a,但每个线程定义的属性a.xx是该线程独有的,Python提供了 threading.local 类,将这个类实例化得到一个全局对象,但是不同的线程使用这个对象存储的数据其它线程不可见(本质上就是不同的线程使用这个对象时为其创建一个独立的字典)。

    基本概念:同一进程内的内存栈是全局的。

    threading.local本质上是对全局字典对象管理类的一个封装,

    内部自动为每个线程维护一个空间(字典),用于当前存取属于自己的值。保证线程之间的数据隔离。

    主要的目的是线程之间的数据隔离。

    当然,自己写也不是不可以,但开发的一个宗旨是不必重复造轮子。

    案例源码:

    import time
    import threading
    
    local = threading.local()
    
    def func(n):
        print(threading.current_thread())
        local.val = n
        time.sleep(2)
    
        print(n)
    
    for i in range(10):
        t = threading.Thread(target=func,args=(i,))
        t.start()

    实质上local.val = n等效于local._local__impl.dicts[‘thread_id’][‘val’] = n

    另外需要注意的是local类重写了取值方法。

  • 相关阅读:
    guava学习--集合2&Range
    guava学习--集合1
    guava学习--FluentIterable
    guava学习--Supplier Suppliers
    guava--Joiner、Splitter、MapJoinner、MapSplitter
    python_输入一个数,判断是否是素数
    python_33_文件操作2
    python_32_文件操作1
    python_31_集合
    python_输出100:200内的素数
  • 原文地址:https://www.cnblogs.com/insane-Mr-Li/p/12092029.html
Copyright © 2011-2022 走看看