threadlocal存放的值是线程封闭的,threadlocal使用场景
在同一个进程下,多个线程共享进程的数据。为了保证数据的安全性,多线程写会被锁死,也就是说多线程模式下效率会降低。
Threading.local()可以为每个线程创建一个本地名称空间。threading.local()是全局的,所有线程都可以访问,但是放入threading.local()对象的属性数据不会受到其他线程的干扰。
未使用Threading.local:
导入线程
导入时间
local=threading.local()
定义集合(I):
# local.i=i
Print (set number ,threading.current _ thread()。姓名,我)
时间.睡眠(1)
获取()
def get():
打印(“获取数据”,I)
if __name__==__main__ :
对于范围(3)中的I:
t=螺纹。线程(target=set,args=(i,))
T.start()结果,所有线程都获得thread Thread-3 set的值。
使用thread.local:
导入线程
导入时间
local=threading.local()
定义集合(I):
local.i=i
Print (set number ,threading.current _ thread()。姓名,本地. I)
时间.睡眠(1)
获取()
def get():
打印(获取数据,local.i)
if __name__==__main__ :
对于范围(3)中的I:
t=螺纹。线程(target=set,args=(i,))
t.start()放在thread.local中的属性是隔离的,互不干扰。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。