werkzeug没有使用threading.loca而是自己实现了werkzeug.local.local

相比 threading.local,werkzeug.local.local的优势:
1.在有greenlet的时候,优先使用greenletid,而不是threadid,既它支持协程,而thread.local只支持线程
2.实现了werkzeug__release_local__,可以被自己的release_pool函数析构,释放当前线程的状态,避免thread.local可能产生的脏数据.

此外werkzeug还实现了LocalStackLocalProxy两种数据结构.

LocalStack是用Local实现的栈结构,可以将对象推入,弹出,或拿到栈顶的对象,所有的修改都只在本线程中可见.
LocalProxy是代理模式实现的,在构造时接收一个callable的参数,这个callable被调用后返回值是一个Thread Local对象.对LocalProxy的所有操作,包括属性访问,方法调用,都会转发到Thread Local对象上.

https://blog.tonyseek.com/post/the-context-mechanism-of-flask/
https://cizixs.com/2017/01/13/flask-insight-context/

werkzeug local相关推荐

  1. werkzeug.local

    虽然python提供的有threadlocal但是在web开发中: 1.使用greenlet时,无法保证协程时间的数据隔离,因为不同的协程在一个线程中 2.wsgi无法保证每个http请求使用的是不同 ...

  2. werkzeug.Local 对象

    在Python中,除了线程还有一些其他的并发方法如协程.所以在一个WSGI服务中,我们不能保证所有的请求都是以线程的形式存在.另外一种情况是当前请求复用了之前请求的线程,所以上一个请求的数据留在了当前 ...

  3. werkzeug LocalProxy

    1.当我们代理的理解 from werkzeug.local import LocalStack, LocalProxyl_stack = LocalStack() l_stack.push({'na ...

  4. Web后端学习笔记 Flask(11)Local线程隔离对象

    flask中的上下文:应用上下文和请求上下文 1. 在flask中,是通过request对象获取用户提交的数据,但是在整个程序运行中,只有一个request对象.在实际应用场景中,会有多个用户同时进行 ...

  5. 什么是Werkzeug

    上一节介绍了什么是WSGI,这一节我们看看Werkzeug 按照官方的说法,Werkzeug(源自德语,工具的意思)是一个WSGI工具库,它开始于一个适用于WSGI的多样化的工具集,后来发展成了现在非 ...

  6. Python Web 框架工具包 werkzeug

    一.什么是werkzeug werkzeug 官方的介绍说是一个 WSGI 工具包,不是一个web服务器,也不是一个web框架,它可以作为一个 Web 框架的底层库,因为它封装好了很多 Web 框架的 ...

  7. Werkzeug框架

    在我们使用Flask以及Werkzeug框架的过程中,经常会遇到如下三个概念:Local.LocalStack和LocalProxy.尤其在学习Flask的Request Context和App Co ...

  8. 面试前赶紧看了5道Python Web面试题,Python面试题No17

    目录 本面试题题库,由公号:非本科程序员 整理发布 第1题: Flask中的请求上下文和应用上下文是什么? 第2题:django中间件的使用? 第3题: django开发中数据做过什么优化? 第4题: ...

  9. celery源码分析-Task的初始化与发送任务

    celery源码分析 本文环境python3.5.2,celery4.0.2,django1.10.x系列 celery的任务发送 在Django项目中使用了装饰器来包装待执行任务, from cel ...

最新文章

  1. 数据特殊显示``````
  2. Python编程语言学习:在根目录的py文件内调用某叶目录文件内的包/库或者函数(常用在GUI编程)之详细攻略
  3. c语言getch在哪个头文件,用getch()需要头文件吗?
  4. java抢购防止多次请求_springboot项目中接口防止恶意请求多次
  5. html5 drawimage 不显示,javascript – 来自视频的HTML5 Canvas drawImage在第一次绘制时不显示...
  6. 致我唯一的kiyoumi
  7. 售票系统的组件图和部署图_门禁安装大样图、管线图、系统图、电锁安装图
  8. (centos6.5)MySQL服务安装
  9. macOS Monterey 12.0beta4黑苹果镜像虚拟机版本
  10. Spring注解之精进之路--超级详解
  11. C++统计代码执行耗时
  12. iOS 苹果官方Demo合集
  13. 伦敦银走势分析最新,十大国际黄金白银交易平台排名
  14. 小米3解锁移动版(2013061)解账号锁刷机包
  15. 使用Spyder2 Express校色仪对屏幕进行校色
  16. 【微信公众号】JS-SDK页面打开提示realAuthUrl错误
  17. 【设计模式二十三剑】✨编写更高质量代码的秘诀✨
  18. Git 常用命令、代码合并
  19. CiteSpace作者共被引图含义详细解析
  20. SpringMVC框架通过Excel批量导入数据

热门文章

  1. sql取日期的年月_机油检测美版银美孚5W30,生产日期20年1月
  2. Python的turtle库还能绘制这些有趣图形?
  3. stm32手册_STM32的GPIO概念简介
  4. 机器学习模型_如何口述机器学习模型原理
  5. tc275单片机的内核_TC275开发板学习心得(一)
  6. 1000道Python题库系列分享23(61个填空题)
  7. 微课|《Python编程基础与案例集锦(中学版)》第2章(2)
  8. 1000道Python题库系列分享五(40道)
  9. 1900页Python系列PPT分享六:面向对象程序设计(86页)
  10. Pandas创建DataFrame对象的几种常用方法