作用:单独给每个线程创建一个内存空间存储变量,依次完成数据隔离。
from threading import Thread, local
import time
# v = 0
obj = local()
def task(i):
# global v
# v = i
# 单独给每个线程创建一个内存空间存储变量
obj.xxx = i
time.sleep(1)
# print(v)
print(obj.xxx)
for i in range(10):
t = Thread(target=task, args=(i,))
t.start()
根据字典自定义一个类似于threading.local功能:
import threading
import time
# 根据字典自定义一个类似于threading.local功能
DICT = {}
def task(i):
ident = threading.get_ident() # 线程的唯一标识
# 若初次进入线程,设置键值对
if not ident in DICT:
DICT[ident] = {'key':i}
# 再次进入则修改键值对
else:
DICT[ident]['key'] = i
time.sleep(2)
print(DICT[ident]['key'])
for i in range(10):
t = threading.Thread(target=task, args=(i,))
t.start()
升级版:
import threading
import time
class Local(object):
DIC = {}
def __getattr__(self, item):
ident = threading.get_ident()
if ident in self.DIC:
return self.DIC[ident].get(item)
return None
def __setattr__(self, key, value):
ident = threading.get_ident()
if ident in self.DIC:
self.DIC[ident][key] = value
else:
self.DIC[ident] = {key:value}
obj = Local()
def task(i):
obj.xxx = i
time.sleep(2)
print(obj.xxx)
for i in range(10):
t = threading.Thread(target=task, args=(i,))
t.start()