threading.local()实现线程数据隔离(threadlocal存放的值是线程封闭,线程间互斥的)

网友投稿 315 2022-08-23


threading.local()实现线程数据隔离(threadlocal存放的值是线程封闭,线程间互斥的)

同一个进程下,多个线程是共享进程的数据,多线程为了保证数据的安全性,多线程的写操作会加锁,加锁也就意味着多线程模型下,效率将降低。

threading.local()可以为每个线程创建局部名称空间,threading.local()是全局的,所有的线程都能访问,但是放入threading.local()对象中的属性数据不会被其它线程干扰.

未使用threading.local:

import threadingimport timelocal = threading.local()def set(i): # local.i = i print('设置数字', threading.current_thread().name, i) time.sleep(1) get()def get(): print('取到数据', i)if __name__ == '__main__': for i in range(3): t = threading.Thread(target=set, args=(i, )) t.start()

结果,所有线程get拿到的是线程Thread-3 set的值

使用thread.local:

import threadingimport timelocal = threading.local()def set(i): local.i = i print('设置数字', threading.current_thread().name, local.i) time.sleep(1) get()def get(): print('取到数据', local.i)if __name__ == '__main__': for i in range(3): t = threading.Thread(target=set, args=(i, )) t.start()

放到thread.local中的属性是隔离的,互不干扰


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

上一篇:分布式任务调度xxl
下一篇:Python第一天(python今天是第几天)
相关文章

 发表评论

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