【Python】threading.local

网友投稿 287 2022-08-27


【Python】threading.local

Threading.local的作用

为每个线程创建一个独立的空间,使得线程对自己的空间中的数据进行操作(数据隔离) 代码实现如下

import threadingfrom threading import localimport timeobj = local()def task(i): obj.xxxxx = i time.sleep(2) print(obj.xxxxx,i)for i in range(10): t = threading.Thread(target=task,args=(i,)) t.start()

如何获取一个线程的唯一标记?

可利用threading.get_ident()

import threadingdef task(i): print(threading.get_ident(),i)for i in range(10): t = threading.Thread(target=task,args=(i,)) t.start()

运行结果

10060 02572 14900 218088 310352 41372 517796 62476 714596 817488 9

根据字典自定义一个类似于threading.local功能?并可为协程创建独立的空间

import timeimport threadingimport greenletDIC = {}def task(i): # ident = threading.get_ident() ident = greenlet.getcurrent() #获得协程标记 if ident in DIC: DIC[ident]['xxxxx'] = i else: DIC[ident] = {'xxxxx':i } time.sleep(2) print(DIC[ident]['xxxxx'],i)for i in range(10): t = threading.Thread(target=task,args=(i,)) t.start()

将上述代码进行优化,封装到对象中,方便调用

import timeimport threadingtry: import greenlet get_ident = greenlet.getcurrentexcept Exception as e: get_ident = threading.get_identclass Local(object): DIC = {} def __getattr__(self, item): ident = get_ident() if ident in self.DIC: return self.DIC[ident].get(item) return None def __setattr__(self, key, value): ident = get_ident() if ident in self.DIC: self.DIC[ident][key] = value else: self.DIC[ident] = {key:value}obj = Local()def task(i): obj.xxxxx = i time.sleep(2) print(obj.xxxxx,i)for i in range(10): t = threading.Thread(target=task,args=(i,)) t.start()


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【Python3】网络编程基础(Python3基础)
下一篇:【Python】正则表达式(python正则表达式替换字符串)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~