Flask之上下文管理 知识储备之问题情境: request中的参数: 单进程单线程 单进程多线程-->reqeust 会因为多个请求,数据发生错乱.--->可以基于threading.local对象 单进程单线程(多协程)threading.local对象做不到(因为一个线程下多个协程同享一个线程的资源) 解决办法: ​ 自定义类似threading.local对象(支持协程)---保证多协程下数据的安全 先来看一下下面这段代码(支持多线程): # -*- coding: utf-8 -*-…
目录 Local 局部变量 全局变量 使用threading.local() 自定义threading.local 函数版 面向对象版 通过setattr和getattr实现 每个对象有自己的存储空间(字典) 在Flask请求上下文中,我们发现Flask中current_app, g这两个对象以及request,session这两个对象,在整个Flask生命周期中,都只是一个对象,那当请求过来的时候,是怎么区分是哪个用户的呢? current_app = LocalProxy(_find_app…
threading.local 面向对象相关: setattr/getattr class Foo(object): pass obj = Foo() obj.x1 = 123 # object.__setattr__(obj,'x1',123) print(obj.x1) # object.__getattr__(obj,'x1') Local类的模拟 简易版 class Local(object): def __init__(self): # self.storage = {} object…
昨日内容回顾 flask和django对比 flask和django本质是一样的,都是web框架. 但是django自带了一些组件,flask虽然自带的组件比较少,但是它有很多的第三方插件. 那么在什么情况下,使用flask呢? 比如让flask写一个大型项目,它需要很多第三方插件.那么堆着堆着,就和django一样了! 总结: 如果一个项目需要的插件比较少,可以使用flask.如果需要的插件比较多,使用django更加方便. flask知识点 装饰器 在flask中,装饰器用的是比较多的.看下…
多线程抢占问题 import time import threading obj = 5 def task(arg): global obj obj = arg time.sleep(1) print(obj) for i in range(6): t = threading.Thread(target=task, args=(i,)) t.start() # 结果 5 5 5 5 5 5 threading.local对象避免线程抢占 为每个线程开辟一块内存空间,存储各自的数据 import…
目录 1.flask请求与响应 2.闪现 3.请求扩展 4.中间件 5.LOCAL对象 6.偏函数 templates 1.flask请求与响应 from flask import Flask,request,make_response,render_template app = Flask(__name__) @app.route('/login.html', methods=['GET', "POST"]) def login(): # 请求相关信息 # request.metho…
目录 04 LocalStack和Local对象实现栈的管理 1.源码入口 1. flask源码关于local的实现 2. flask源码关于localstack的实现 3. 总结 04 LocalStack和Local对象实现栈的管理 1.源码入口 from flask import globals # 从globals进入可以看见此源码 1. flask源码关于local的实现 local与localstack关系 flask中是localstack结合local使用 local为local…
04 LocalStack和Local对象实现栈的管理 目录 04 LocalStack和Local对象实现栈的管理 1.源码入口 1. flask源码关于local的实现 2. flask源码关于localstack的实现 3. 总结 1.源码入口 from flask import globals # 从globals进入可以看见此源码 1. flask源码关于local的实现 local与localstack关系 flask中是localstack结合local使用 local为local…
一.线程锁 线程安全,多线程操作时,内部会让所有线程排队处理.如:list/dict/Queue 线程不安全 + 人(锁) => 排队处理 1.RLock/Lock:一次放一个 a.创建10个线程,在列表中追加自己,如下代码: import threading v = [] def func(arg): v.append(arg) print(v) for i in range(10): t = threading.Thread(target=func, args=(i,)) t.start()…
蓝图 作用:对程序进行目录结构划分 不使用蓝图情况下,自己分文件 目录结构: -templates -views -__init__.py -user.py -order.py -app.py app.py from views import app if __name__ == '__main__': app.run() __init__.py from flask import Flask,request app = Flask(__name__) #不导入这个不行 from . impor…