python

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()
原文地址:https://www.cnblogs.com/chaoqi/p/10493157.html