多平台统一管理软件接口,如何实现多平台统一管理软件接口
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~