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()

 

相关文章:

  • 2022-12-23
  • 2021-07-01
  • 2021-12-30
  • 2022-12-23
  • 2022-02-02
  • 2021-09-16
  • 2022-01-30
猜你喜欢
  • 2022-02-02
  • 2021-10-05
  • 2021-10-14
  • 2021-10-13
  • 2022-12-23
  • 2021-07-16
  • 2021-09-30
相关资源
相似解决方案