flask 源码专题(七):threading.local和高级
2024-10-09 10:21:13
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()
最新文章
- 文件上传&;文件下载
- 显示SQL Server分配的全部内存
- Entity Framework Fluent API
- 转:ASP.NET MVC扩展之HtmlHelper辅助方法
- 2016/7/30 div位置设置,表格大小统一
- 增加mvc:resources后访问不了注解配置的controller的问题
- android查看真机中的数据库
- 【转】 NSString / NSMutableString 字符串处理,常用代码 (实例)
- 京东UED招聘web前端开发工程师(中/高级)
- cookie 处理 以及模拟登陆
- Python selectors实现socket并发
- eureka分区的深入讲解
- npm install 报错Unexpected end of JSON input while parsing near...
- PyQt样式表设置QComboBox
- C++ AfxBeginThread的介绍/基本用法
- iOS 将Excel导入到SQLite3的过程
- Dungeon Game (GRAPH - DP)
- PHP 生成16 uuid
- 谈一谈PHP计划任务
- Intellij IDEA 2017 通过scala工程运行wordcount
热门文章
- 使用Docker搭建Nextcloud SSL站点
- ping外网:unknown host www.baidu.comc排查
- 最后一面挂在volatile关键字上,面试官:重新学学Java吧!
- FastStone+ImageReady+Kutools plus导入图片到Excel单元格
- xdoj 2020校赛复盘
- c++ UDP套接字服务器端代码示范
- cb06a_c++_顺序容器的定义
- vulstack红队评估(四)
- 项目实战:Qt手机模拟器拉伸旋转框架
- android 6.0 权限设置详解