threading.local

    1. threading.local
        a. threading.local 
            作用:为每个线程开辟一块空间进行数据存储。
        
            问题:自己通过字典创建一个类似于threading.local的东西。
                storage={
                    4740:{val:0},
                    4732:{val:1},
                    4731:{val:3},
                    4712:{},
                    4732:{},
                    5000:{val:}
                }
        b. 自定义Local对象
            作用:为每个线程(协程)开辟一块空间进行数据存储。
    
                try:
                    from greenlet import getcurrent as get_ident
                except Exception as e:
                    from threading import get_ident

                from threading import Thread
                import time

                class Local(object):

                    def __init__(self):
                        object.__setattr__(self,'storage',{})

                    def __setattr__(self, k, v):
                        ident = get_ident()
                        if ident in self.storage:
                            self.storage[ident][k] = v
                        else:
                            self.storage[ident] = {k: v}

                    def __getattr__(self, k):
                        ident = get_ident()
                        return self.storage[ident][k]

                obj = Local()

                def task(arg):
                    obj.val = arg
                    obj.xxx = arg
                    print(obj.val)

                for i in range(10):
                    t = Thread(target=task,args=(i,))
                    t.start()
    

猜你喜欢

转载自www.cnblogs.com/jassin-du/p/8978079.html