import time
import threading
try: # 线程和协程都可处理
import greenlet
get_ident = greenlet.getcurrent
except Exception as e:
get_ident = threading.get_ident class Local(object):
"""
通过进程号/协程号的唯一标识,给每一个进程/协程开辟自己个空间,实现数据隔离
"""
DIC = {} def __getattr__(self, item):
ident = get_ident()
if ident in self.DIC:
return self.DIC[ident].get(item)
return None def __setattr__(self, key, value):
ident = get_ident()
if ident in self.DIC:
self.DIC[ident][key] = value
else:
self.DIC[ident] = {key: value} obj = Local() def fn(i):
obj.x1 = i
time.sleep(2)
print(obj.x1,i) for i in range(10):
t = threading.Thread(target=fn,args=(i,))
t.start()