try:
from greenlet import getcurrent as get_ident #获取协程id
except ImportError:
try:
from thread import get_ident # 获取线程id
except ImportError:
from _thread import get_ident # 获取线程id
class Local(object):
def __init__(self):
object.__setattr__(self, '__storage__', {}) # self.__storage__ = {},类中有__setattr__方法,所以此处应该用这种方法来创建字段,否则会递归
object.__setattr__(self, '__ident_func__', get_ident) # self.__ident_func__ = get_ident,get_ident获取唯一id
def __getattr__(self, name):
try:
return self.__storage__[self.__ident_func__()][name] # 取值print(request.method)
except KeyError:
raise AttributeError(name)
def __setattr__(self, name, value): # request.method = "POST"
ident = self.__ident_func__()
storage = self.__storage__
try:
storage[ident][name] = value # 赋值到self.__storage__这个字典中,
except KeyError:
storage[ident] = {name: value}
Flask上下文源码分析之threading.local拓展
最新推荐文章于 2024-05-21 07:41:15 发布