同一个进程下的多线程共享同一份数据,多线程操作同一份数据为了保证数据的安全性,通常需要加锁,锁虽然保证了数据安全但效率低
threading.local()可以为每个线程创建自己的局部名称空间, 放入到该局部空间的数据不会被其他线程干扰
import threading
local_values = threading.local()
def func(num):
# 使用 threading.local()
local_values.name = num # 为各自的线程空间赋值
import time
time.sleep(1)
print(
local_values.name, # 每个线程去自己的名称空间取值
threading.current_thread().name
)
for i in range(5):
th = threading.Thread(target=func, args=(i,), name='线程%s' % i)
th.start()
使用 threading.local() 打印结果:
1 线程1
0 线程0
2 线程2
4 线程4
3 线程3
未使用 threading.local() 打印结果:
4 线程1
4 线程0
4 线程2
4 线程4
4 线程3