• 线程本地存储 python 和 java 区别
    python 的线程本地存储和 java 的线程本地存储还是有些区别的,python 的线程本地存储需要thread_local = threading.local(),之后通过thread_local.x = 1就表示把 1 存进thread_local.x中了,java 的线程本地存储会new ThreadLocal()对象,然后对对象 set,get 存取即可

  • 需求场景
    现在希望将数据保存到线程存储中,不同的线程存储上不同数据,在同一个线程不同类不同模块都可以取到这个存储在线程中的数据

  • 编码实现

    # 本地线程存储器
    class ThreadLocalStorage:
        # 类变量
        key_value = {}
    
        # 存储线程和对应线程的数据
        @classmethod
        def set(cls, thread, data):
            cls.key_value.update({thread: data})
    
        # 通过键名取值
        @classmethod
        def get(cls, thread):
            return cls.key_value[thread]
    
        # 清空当前线程存储的对应数据
        @classmethod
        def clear_current_thread(cls):
            del cls.key_value[threading.current_thread()]
    
        # 清空所有线程以及所有线程存储的对应数据
        @classmethod
        def clear_all_thread(cls):
            cls.key_value.clear()
            cls.key_value = {}
    
  • 编码解释
    采用工具类的方式,将 {线程: 数据} 以键值对的形式存储在工具类的字典中,其中该字典是类变量,工具类中各个方法为静态方法,这样就可以在不同地方直接对该工具类的类变量存取当前线程的数据了