一、上下文管理相关知识点:

a、类似于本地线程
创建Local类:
{
线程或协程唯一标识: { 'stack':[request],'xxx':[session,] },
线程或协程唯一标识: { 'stack':[] },
线程或协程唯一标识: { 'stack':[] },
线程或协程唯一标识: { 'stack':[] },
}
b、上下文管理的本质
每一个线程都会创建一个上面那样的结构,
当请求进来之后,将请求相关数据添加到列表里面[request,],以后如果使用时,就去读取
列表中的数据,请求完成之后,将request从列表中移除
c、关系
local = 小华={
线程或协程唯一标识: { 'stack':[] },
线程或协程唯一标识: { 'stack':[] },
线程或协程唯一标识: { 'stack':[] },
线程或协程唯一标识: { 'stack':[] },
}
stack = 强哥 = {
push
pop
top
}
存取东西时都要基于强哥来做
d、最近看过一些flask源码,flask还是django有些区别
- Flask和Django区别?
- 请求相关数据传递的方式
- django:是通过传request参数实现的
- Flask:基于local对象和,localstark对象来完成的
当请求刚进来的时候就给放进来了,完了top取值就行了,取完之后pop走就行了 问题:多个请求过来会不会混淆
-答: 不会,因为,不仅是线程的,还是协程,每一个协程都是有唯一标识的:
from greenlent import getcurrentt as get_ident #这个就是来获取唯一标识的

二、上下文管理流程:

-上下文管理:
- 请求上下文(ctx=RequestContext()):request/session
- App上下文(app_ctx=AppContext()): app/g - 程序启动:
两个Local:
local1 = { } local2 = { } 两个LocalStack:
_request_ctx_stack
_app_ctx_stack
- 请求到来
对数据进行封装:
ctx = RequestContext(request,session)
app_ctx = AppContext(app,g)
保存数据:
将包含了(app,g)数据的app_ctx对象,利用 _app_ctx_stack(贝贝,LocalStack())将app_ctx添加到Local中
storage = {
1231:{stack:[app_ctx(app,g),]}
}
将包含了request,session数据的ctx对象,利用_request_ctx_stack(刘淞,LocalStack()),将ctx添加到Local中
storage = {
1231:{stack:[ctx(request,session),]}
} - 视图函数处理: from flask import Flask,request,session,current_app,g app = Flask(__name__) @app.route('/index')
def index():
# 去请求上下文中获取值 _request_ctx_stack
request.method # 找小东北获取值
session['xxx'] # 找龙泰获取值 # 去app上下文中获取值:_app_ctx_stack
print(current_app)
print(g) return "Index" if __name__ == '__main__':
app.run()
app.wsgi_app - 结束
_app_ctx_stack.pop()
_request_ctx_stack.pop()

三、上下文管理源码剖析

详见:https://www.cnblogs.com/jiangshanduojiao/p/9200902.html

最新文章

  1. PhpStorm 2016.3 For Mac 重大里程碑更新 -- 终于解决了不能输入中文标点符号的重大bug
  2. 创建Xml文件与修改Xml文件
  3. [Android Pro] 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能
  4. Cookie的使用与实现记住用户名案例
  5. Linux文件夹文件创建、删除
  6. MPI初学-安装及OpenMPI函数说明
  7. Libvirt 虚拟化库剖析
  8. 用Python复习离散数学(一)
  9. vijos1053 用spfa判断是否存在负环
  10. DNS解析详细过程
  11. sed修炼系列(一):花拳绣腿之入门篇
  12. python 编写简单的setup.py
  13. 听说你开发.NET还在用VS,小哥哥给你推荐全平台的Rider
  14. hadoop2.6.5运行wordcount实例
  15. 帧同步(LockStep)该如何反外挂
  16. 序言 - PHP零基础快速入门
  17. SP283 NAPTIME - Naptime
  18. 微信小程序用户信息解密失败导致的内存泄漏问题。
  19. Python使用requests库,requests.post格式会引发参数不存在问题
  20. Opencv利用ROI将一张图片叠加到另一幅图像的指定位置

热门文章

  1. Python3学习之路~3.3 内置函数
  2. 静态文件link 数据库迁移命令 新建app命令
  3. PHP注册器模式
  4. 2019.03.30 Head first
  5. jenkins配置详解之——执行者数量
  6. vbox 相关
  7. CSS选择器操作大全
  8. 查看CPU信息
  9. python SMTP attachment
  10. python package