flask 源码专题(七):threading.local和高级
1.python之threading.local
- 当每个线程在执行 val.num=1 ,在内部会为此线程开辟一个空间,来存储 num=1 
- val.num,找到此线程自己的内存地址去取自己存储 num 
import time
import threading val1 = threading.local() def task(i):
val.num = i
time.sleep(1)
print(val.num) for i in range(4):
t = threading.Thread(target=task,args=(i,))
t.start()
2. 线程唯一标识
get_ident
import threading
from threading import get_ident def task():
ident = get_ident()
print(ident)
for i in range(20):
t = threading.Thread(target=task)
t.start()
3. 自定义threading.local
储存结构:
storage = {
1112:{'x1':1}
1113:{'x1':2}
1114:{'x1':3}
1115:{'x1':4}
}
import threading
class Local(object):
def __init__(self):
object.__setattr__(self,'storage',{}) def __setattr__(self, key, value):
ident = threading.get_ident()
if ident in self.storage:
self.storage[ident][key] = value
else:
self.storage[ident] = {key:value} def __getattr__(self, item):
ident = threading.get_ident()
if ident not in self.storage:
return
return self.storage[ident].get(item) local = Local() def task(arg):
local.x1 = arg
print(local.x1) for i in range(5):
t = threading.Thread(target=task,args=(i,))
t.start()
4. 加强版threading.local
储存结构:
storage = {
1111:{'x1':[]},
1112:{'x1':[]}
1113:{'x1':[]}
1114:{'x1':[]}
1115:{'x1':[]},
1116:{'x1':[]}
}
import threading
class Local(object):
def __init__(self):
object.__setattr__(self,'storage',{}) def __setattr__(self, key, value):
ident = threading.get_ident()
if ident in self.storage:
self.storage[ident][key].append(value)
else:
self.storage[ident] = {key:[value,]} def __getattr__(self, item):
ident = threading.get_ident()
if ident not in self.storage:
return
return self.storage[ident][item][-1] local = Local() def task(arg):
local.x1 = arg
print(local.x1) for i in range(5):
t = threading.Thread(target=task,args=(i,))
t.start()
flask 源码专题(七):threading.local和高级的更多相关文章
- 03 flask源码剖析之threading.local和高级
		03 threading.local和高级 目录 03 threading.local和高级 1.python之threading.local 2. 线程唯一标识 3. 自定义threading.lo ... 
- flask 源码专题(五):SqlAlchemy 中操作数据库时session和scoped_session的区别
		1原生session: from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from sqlalc ... 
- flask 源码专题(二):请求上下文与全文上下文
		源码解析 0. 请求入口 if __name__ == '__main__': app.run() def run(self, host=None, port=None, debug=None, lo ... 
- flask 源码专题(十一):LocalStack和Local对象实现栈的管理
		目录 04 LocalStack和Local对象实现栈的管理 1.源码入口 1. flask源码关于local的实现 2. flask源码关于localstack的实现 3. 总结 04 LocalS ... 
- flask 源码专题(九):flask扩展点
		1. 信号(源码) 信号,是在flask框架中为我们预留的钩子,让我们可以进行一些自定义操作. pip3 install blinker 2. 根据flask项目的请求流程来进行设置扩展点 中间件 # ... 
- flask 源码专题(一):app.run()的背后
		当我们用Flask写好一个app后, 运行app.run()表示监听指定的端口, 对收到的request运行app生成response并返回. 现在分析一下, 运行app.run()后具体发生了什么事 ... 
- flask 源码专题(八):路由加载
		1.示例代码 from flask import Flask app = Flask(__name__,static_url_path='/xx') @app.route('/index') def ... 
- flask 源码专题(六):session处理机制
		前言 flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活 ... 
- flask 源码专题(十):flash源码研究
		flash源码 def flash(message, category="message"): flashes = session.get("_flashes" ... 
随机推荐
- Java 技术网站总结(不停更新)
			Spring Spring 中文手册 Spring 教程 Spring For All Spring 学习笔记 Spring Boot Break易站 Spring Cloud 中文文档 Spring ... 
- Springboot搭建Eureka并设置Eureka登录账号密码
			Springboot搭建Eureka并设置Eureka登录账号密码 一.创建一个springboot项目 1.可以使用Spring Initializr,用浏览器打开http://start.spri ... 
- Windows下C,C++开发环境搭建指南
			Windows下C,C++开发环境搭建指南 前情提要 基于近一段时间很多网友发邮件反馈,说一些项目编译出现问题,诸如此类的情况. 就觉得很有必要写一篇C,C++开发环境的小指南,统一回复. 1.君欲善 ... 
- C#数据结构与算法系列(三):队列
			1.介绍 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则,即:先存入队列的数据,要先取出.后存入的要后取出 队列是属于线性结构中的一种 2.图示 3.通过数组实现 public ... 
- java特性 JDK JRE JVM
			1简单性 2可移植性性(跨平台) 3面向对象 4高性能 5分布式 6动态性 7多线程 8安全性JDK:java开发工具 . JRE:JDK:java运行环境 . JVM:JDK:java虚拟机 
- Android学习笔记点击事件和触摸事件的区别
			当我们点击手机屏幕的时候Android系统不仅会触发单击事件,还会触发触摸事件.在Android中它会先触发触摸事件,如果这个触摸事件没有被消费掉再去触发单击事件 代码示例: MainActivty. ... 
- cb17a_c++_构造string对象的方法
			cb17a_c++_构造string对象的方法string sstring s(s2)string s("value")string s(n,'c')string s(b,e) / ... 
- Redis 持久化-AOF自动重写配置
			AOF自动重写 auto-aof-rewrite-min-size size auto-aof-rewrite-percentage percent 在 redis.conf 自动重写的默认配置: a ... 
- CSV文件导入到数据库中读取数据详解(接着上个帖子)
			一.controller层 二.SERVICE层 @Overridepublic Result importJinjiangAssessResult(MultipartFile file) throw ... 
- JavaWeb网上图书商城完整项目--24.注册页面的css样式实现
			现在框架已经做好了,即下来我们要对页面进行装饰了,第一步给每一个元素添加id 1.最外面的div添加id为divMain 2.第二个div添加id为divTitle,里面的span对应的id为span ... 
