[flask源码梳理]之三 Local空间换时间

 中心思想:

  通过在创建字典,对数据进行临时储存,解决线程的安全问题。

源码数据隔离的代码:

  __slots__  = ('__storage__', '__ident_func__')  #  限制使用这两个

class Local(object):
    __slots__ = ('__storage__', '__ident_func__')

    def __init__(self):
        # __storage__ = {1231:{'stack':[]}}
        object.__setattr__(self, '__storage__', {})
        object.__setattr__(self, '__ident_func__', get_ident)

    def __getattr__(self, name):
        try:
            return self.__storage__[self.__ident_func__()][name]
        except KeyError:
            raise AttributeError(name)

    def __setattr__(self, name, value):
        ident = self.__ident_func__()
        storage = self.__storage__
        try:
            storage[ident][name] = value
        except KeyError:
            storage[ident] = {name: value}

    def __delattr__(self, name):
        try:
            del self.__storage__[self.__ident_func__()][name]
        except KeyError:
            raise AttributeError(name)

 

 

更新中。。。

posted @ 2018-11-23 17:52  pupilheart  阅读(78)  评论(0编辑  收藏  举报
小强带你挣小钱v:zln88896

公告

点击 更新中