线程数据隔离(local概念)
一、local
在多个线程之间使用threading.local对象,可以实现多个线程之间的数据隔离
import time import random from threading import Thread,local loc = local() def func1(): global loc print(loc.name,loc.age) def func2(name,age): global loc loc.name = name loc.age = age time.sleep(random.uniform(0,2)) func1() Thread(target=func2,args=('明哥',19)).start() Thread(target=func2,args=('小弟',17)).start() 结果: 小弟 17 明哥 19
解释:
在平时的线程中,应该每次打印的结果应该都是最后进来的线程的数据,即第一次的数据会被第二次的数据覆盖,
但是使用了local对象,可以实现线程的数据隔离,因此打印的两次结果都不一样。
原理:
local对象会创建一个大字典,字典的键是线程的id,值也是一个字典,存储数据,例如:
{
线程id1:{'name':'明哥',age:19}
线程id2:{'name':'小弟',age:17}
...
}