美文网首页
Flask源码剖析二之本地栈的建立

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

作者: 羽煊 | 来源:发表于2019-06-18 15:59 被阅读0次

    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 = {} 。

    相关文章

      网友评论

          本文标题:Flask源码剖析二之本地栈的建立

          本文链接:https://www.haomeiwen.com/subject/bqbfqctx.html