首页 > 编程语言 >Python 实现 ThreadLocal

Python 实现 ThreadLocal

时间:2023-07-10 15:44:58浏览次数:34  
标签:__ .__ get Python self ctx 实现 ThreadLocal ident

import threading
from threading import get_ident
import time

class Context:

    def __init__(self):
        object.__setattr__(self, '__global_context__', dict())
        object.__setattr__(self, '__get_ident__', get_ident)

    def __setattr__(self, key, value):
        try:
            self.__global_context__[self.__get_ident__()][key] = value
        except KeyError:
            self.__global_context__[self.__get_ident__()] = {key: value}

    def __getattr__(self, item):
        try:
            return self.__global_context__[self.__get_ident__()][item]
        except KeyError:
            return None

    def __delattr__(self, item):
        try:
            self.__global_context__[self.__get_ident__()].pop(item, None)
        except KeyError:
            return None

    def __repr__(self):
        return str(self.__global_context__.get(self.__get_ident__()))


ctx = Context()
ctx.a = 1
ctx.b = 2
ctx.c = 2


def as_fun(i):
    ctx.a = i
    print(ctx)
    time.sleep(1)


print(ctx.__dict__)
threads = []
for _ in range(5):
    t = threading.Thread(target=as_fun, args=(_,))
    t.start()
    threads.append(t)

for t in threads:
    t.join()

print(ctx.__dict__)

标签:__,.__,get,Python,self,ctx,实现,ThreadLocal,ident
From: https://www.cnblogs.com/l806760/p/17541311.html

相关文章

  • 接上篇:如何在项目中实现ES查询功能?
     大家好,之前我们教大家如何将MySQL数据同步到ES。这篇文章在技术派项目中实现ES查询功能。不多说上文章目录: 01背景在SpringBoot整合ES中,有两种常见方法,一种是ElasticsearchRestTemplate,另一种是RestHighLevelClient。ElasticsearchRestTemplate是ES基......
  • Camstar表格自定义写js,实现单元格合并。
     效果: ......
  • Java中Queue的实现方式有哪些?
    一、队列的概念Queue用于模拟队列这种数据结构,队列通常是指“先进先出”(FIFO=firstinfirstout)的容器。新元素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。这种结构就相当于我们排队上车,先到的站在前面,先上车,后到的得等前......
  • Java实现浏览器端大文件分片上传源代码
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。这次项目的需求:支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,ie8,ie9,Chrome,Firefox,360安全浏览器,并且刷新浏览器后仍然能够续传,重启浏览器(关闭......
  • 使用 INFINI Console 实现 Elasticsearch 的增量数据迁移
    功能介绍#在INFINIConsole1.3.0版本里,数据迁移功能增加了对增量迁移的支持。这篇文章将会介绍增量迁移的具体使用方法和实现原理。场景介绍#以常见的日志场景为例,假设A集群有一个用来记录线上HTTP请求记录的索引request-logs,数据结构如下:{"request_body":{...},......
  • MFCC 算法及 C 实现
    参考https://blog.csdn.net/weixin_38468077/article/details/1027095101.MFCC是做什么?1.1梅尔频谱人耳能听到的声音频率范围是20-20000Hz,但是人耳对频率感知并不是线性的,而是近似于......
  • python 执行超时装饰器
    代码:importsignalclassTimeoutError(Exception):passdeftimeout(seconds=10,error_message='Timeout'):defdecorator(func):defwrapper(*args,**kwargs):def_handle_timeout(signum,frame):raiseTi......
  • Python的日志
    Python的日志,看上去啰啰嗦嗦的。请大神写了个通俗易懂简单方便通用的日志:importlogging#配置日志记录级别和输出方式logging.basicConfig(level=logging.DEBUG,filename='mylog.log',filemode='w',format='%(asctime)s-%(levelname)s-%(message)s')deflog_exceptio......
  • 西门子免授权CNC数控系统数据采集c#、C、python都支持,可支持再各种操作系统上运行,无须
    西门子数控系统数据采集方案(无需OPC授权方案)西门子数控系统4.5版本及以上集成了工业协议OPCUA,用户可通过OPCUA协议进行设备的数据采集,但是需要西门子授权,而且仅支持828d,828dsl,840dsl本协议可通过原生TCP数据包和数控系统进行通讯,支持各种类型开发语言和操作平台。  西门......
  • python过滤器filter()及lambda表达式的应用
    一、filter()方法介绍:filter()是Python内置的一个函数,用于根据指定的条件对可迭代对象进行筛选,返回符合条件的元素。filter()函数的语法如下:filter(function,iterable)其中function是一个函数或可调用对象,表示用于判断每个元素是否符合条件的函数。iterable则是一个可......