当前位置 : 主页 > 编程语言 > python >

threading.local()实现线程数据隔离

来源:互联网 收集:自由互联 发布时间:2022-08-10
同一个进程下,多个线程是共享进程的数据,多线程为了保证数据的安全性,多线程的写操作会加锁,加锁也就意味着多线程模型下,效率将降低。 threading.local()可以为每个线程创建局

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

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


未使用threading.local:

import threading
import 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的值

threading.local()实现线程数据隔离_线程隔离

使用thread.local:

import threading
import 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中的属性是隔离的,互不干扰

threading.local()实现线程数据隔离_多线程_02


上一篇:Pytest-执行测试用例
下一篇:没有了
网友评论