同一个进程下,多个线程是共享进程的数据,多线程为了保证数据的安全性,多线程的写操作会加锁,加锁也就意味着多线程模型下,效率将降低。 threading.local()可以为每个线程创建局
同一个进程下,多个线程是共享进程的数据,多线程为了保证数据的安全性,多线程的写操作会加锁,加锁也就意味着多线程模型下,效率将降低。
threading.local()可以为每个线程创建局部名称空间,threading.local()是全局的,所有的线程都能访问,但是放入threading.local()对象中的属性数据不会被其它线程干扰.
未使用threading.local:
import threadingimport time
local = 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 time
local = 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中的属性是隔离的,互不干扰