Flask源码剖析二之本地栈的建立

flask利用threading.Local以及flask自定义的Local来管理上下文对象。flask 实例起动后会初始化2个Local栈,一个是请求上下文栈一个是应用上下文栈。Flask的上下文对象会保存在属于自己的Local栈里。在Local栈里对象是以线程ID或协程ID进行隔离的。
flask.globals
_request_ctx_stack = LocalStack()
_app_ctx_stack = LocalStack()
本文以_request_ctx_stack为例,分析上下文栈的建立过程
werkzeug.local. LocalStack
class LocalStack(object):
def init(self):
self._local = Local()
LocalStack类的构造方法中是对Local类的实例化。

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

    def __init__(self):
        object.__setattr__(self, "__storage__", {})
        object.__setattr__(self, "__ident_func__", get_ident)

Local 类实例化过程实现了一个字典,get_ident可以得到当前线程或协程ID。这样_request_ctx_stack = LocalStack(),_request_ctx_stack对象在app实例初始化之初其实就是一个空的字典_request_ctx_stack = {} 。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容