当前位置:   article > 正文

flask 中的 werkzeug Local,LocalStack 和 LocalProxy 技术应用_flask 中localproxy 使用

flask 中localproxy 使用

什么是 Local?

  1. wsgi 每次请求,会把过程进行抽离无状态话,过程数据存储在本次请求的全局变量中,使用到了Local. Local 作为每次请求的全局命令空间,属于每次请求的私有
  2. LocalStack 与 Local 相似,在 Local 基础之上使用堆栈方式进行操作,管理
  3. LocalProxy 代理类,代理 Local 或 LocalStack 实例

为什么使用 Local?
 为什么使用自定义 Local,而不是 threading.local。这是由内核决定的

  1. web 应用在启动之后,是一单线+协成程启动的话,会污染全局变量,无法区分,
  2. 使用多线程+协成无法保证,派发请求的工作协程,无法保证同时工作时且分别位于多个线程内,彼此互不影响

所以: werkzeug 给出了自己的解决方案:Local 和 LocalStack

为什么使用 LocalProxy?
  那么问题来了:请求的上下文的私有变量存储在 Local 和 LocalStack 中,那在多任务时,每次调用 from flask import request, g, session , 如何保证获取正确的上下文,而不发生混乱?

在 flask.globals.py 中

#Python学习交流群797877325 免费获取系统学习教程
def _lookup_req_object(name):  
    top = _request_ctx_stack.top  
    if top is None:  
        raise RuntimeError('working outside of request context')  
    return getattr(top, name)  

_request_ctx_stack = LocalStack()  
request = LocalProxy(partial(_lookup_req_object
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/448757
推荐阅读
相关标签
  

闽ICP备14008679号