flask项目深度研究之localstack

重启博客,记录一些零散的知识和复习学习过的知识

今天记录的是关于localstack的一些知识,首先需要讲到python原生的threadlocal

a = 10 import threading

def test():
    print(a)

thread = threading.Thread(target=test)
thread.start()
thread.join()

 如上,有一个变量a,若线程相对其进行操作,可以将其作为参数传进去,如果要对其进行修改,则需要加锁,操作起来很麻烦,为了解决这个问题threadlocal出现了,threadlocal有一个map属性,以字典

形式保存数据,其中key为线程的id,value为变量的副本,这样每个线程可以操作自己的变量副本,从而实现了线程的隔离,互不干扰

local = Thread.local()
local.g = 10
def xh():
    for i in range(local.g):
    print i
t1 = Thread(target=xh,name="xunhuan")
t2 = Thread(target=xh,name="xunhuan2")
t1.start()
t2.start()
t1.join()
t2.join()

如以上伪代码

flask中的localstack是threadlocal的二次封装,并且localstack支持协程,而threadlocal不支持,而存储数据的数据结构不再是字典,而是栈。

当有新的请求的时候,会生成新的请求上下文,并且压入(push)栈,这样栈顶永远都是存储的当前请求的上下文,并且localstack提供了一个top方法可以让我们取到这个栈顶对象,但我们的请求结束的时候,会调拥pop方法,将请求上下文移除栈,这样就保证了文并发的情况下,实现了请求上下文的效果。

请求开始:
user = localstack()
user .push(current_user)
获取current_user:
current_user = user .top()
请求结束:
user .pop()

如以上伪代码

但是这里还有一个问题,就是current_user已经生成,如果当前请求结束,user被移除栈,user发生改变,但是current_user还是指向之前的user,所以在werkzeug中给我们提供了localproxy作为代理

a = user()
a.name = 张三
b= user()
b.name= 李四
user.push(a)
user.push(b)
def get_current_user():
       return user.top()
localproxy= localproxy(get_current_user)
print(loclaproxy.name)
user.pop()
print(localproxy.name)

如以上代码

张三和李四先把存在栈中,定义一个方面取出user,然后通过代理localproxy这个代理进行取出,然后把取出的数据移除栈,代理的机制还待进一步研究

原文地址:https://www.cnblogs.com/HZHST/p/11140594.html

时间: 2024-08-02 10:24:57

flask项目深度研究之localstack的相关文章

深度研究分析互联网地下产业链的目的

中国互联网行业有一定的特殊性:有国情决定了用户需求的多样性,而主流的互联网产品却很难满足所有的用户心理诉求:加上最近几年互联网高速发展带来的红利,以及技术成本的不断降低,都催生了中国互联网地下产业链. 地下产业链并不是消极的事物,在一定程度上讲,地下产业链更接近用户需求,更能还原互联网的本貌.在中国的传统行业都有一定的所谓黑市门槛,即属于潜规则范畴或者是不为人知的行业秘密,这种信息只流传在最信任的人脉圈子里,读懂了这些,才能算从根本上了解了这个行业. 对于互联网创新者来说,地下产业链代表着最接地

关键词匹配项目深入研究(二)- 分表思想的引入

(二)分表思想的引入 近期的文章: 1)高并发数据采集的架构应用(Redis的应用)                     2)高可用数据采集平台(如何玩转3门语言php+.net+aauto) 手把手教你做关键词匹配项目这块基本已经完成,深入研究是对系统的性能作为分析,在一些环境的刺激下所必需要做的一些改变. 手把手教你做关键词匹配项目: 手把手教你做关键词匹配项目(搜索引擎)---- 第一天~手把手教你做关键词匹配项目(搜索引擎)---- 第二十二天 (共22篇) 深入研究:上节讲到 关键

开源CMS建站项目DNN研究与心得

DNN (Dotnetnuke) 首先是开源的,并且采用BSD开源协议,也就是说你可以任意修改源代码.传播.作为商品出售,仅有的要求就是保留源代码中的版权文字,这就解决了我多年来的心病:我知道动网新闻发布系统.微软官方论坛等都做得相当不错,可惜源代码都是不公开的,并且有着很严格的产权保护,你在做项目时不得不多考虑一些东西,但是DNN不一样,它几乎赤裸裸的以至于你可以为所欲为,并且得到了官方的稳定支持,学习和开发资料相对齐全,这么好的东西,我为什么不采用拿来主义呢? DNN部署是很简单的,没费多大

关键词匹配项目深入研究-过滤器的引入

关键词匹配项目深入研究(一) - 过滤器的引入 在开始看本篇时,请先了解 手把手教你做关键词匹配项目(搜索引擎)---- 第一天 ~ 手把手教你做关键词匹配项目(搜索引擎)---- 第二十二天 前言 接上回说到,小帅帅把完成后的代码,以及测试结果给出来后,于老大也没多说什么,就被要求上线了,原因很简单:大家都想有点贡献,福利也是少不了的,后期遇到的事情后期再来升级,那餐饭,小帅帅很happy,很满足,当然同行的有小丁丁,于老大,王总监. 问题的前因 随着项目的运行,采集关键词的应用日益广泛,突然

Java-WebSocket 项目的研究(三) WebSocketClient 类 详解

通过之前两篇文章 Java-WebSocket 项目的研究(一) Java-WebSocket类图描述 Java-WebSocket 项目的研究(二) 小试身手:客户端连接服务器并发送消息实例 的介绍我们大概了解到了整个项目的类结构,其中有一个重要的类:WebSocketClient,下面就让我们详细了解一下这个类 首先看一下我们之前的类图关于WebSocketClient的描述,可以看出: 1.继承自WebSocketAdapter 2.依赖于类WebSocketImpl(实际上关于WebSo

Java-WebSocket 项目的研究(三) WebSocketClient 类 具体解释

通过之前两篇文章 Java-WebSocket 项目的研究(一) Java-WebSocket类图描写叙述 Java-WebSocket 项目的研究(二) 小试身手:client连接server并发送消息实例 的介绍我们大概了解到了整个项目的类结构,当中有一个重要的类:WebSocketClient,以下就让我们具体了解一下这个类 首先看一下我们之前的类图关于WebSocketClient的描写叙述,能够看出: 1.继承自WebSocketAdapter 2.依赖于类WebSocketImpl(

开始Flask项目

新建Flask项目. 设置调试模式. 理解Flask项目主程序. 使用装饰器,设置路径与函数之间的关系. 使用Flask中render_template,用不同的路径,返回首页.登录员.注册页. 用视图函数反转得到URL,{{url_for('login')}},完成导航条里的链接. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <t

二十、开始Flask项目

新建Flask项目. 设置调试模式. 理解Flask项目主程序. 使用装饰器,设置路径与函数之间的关系. 使用Flask中render_template,用不同的路径,返回首页.登录员.注册页. from flask import Flask,render_template app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') @app.route('/login/',met

作业20-开始Flask项目

新建Flask项目. 设置调试模式. 理解Flask项目主程序. 使用装饰器,设置路径与函数之间的关系. 使用Flask中render_template,用不同的路径,返回首页.登录员.注册页. 用视图函数反转得到URL,url_for('login'),完成导航里的链接. from flask import Flask from flask import render_template app = Flask(__name__) @app.route('/') def base(): retu