当前位置: 首页 > news >正文

flask》》多线程并发数据安全问题 threading.local werkzeug.local.Local

python 作用域 问题

x=10# 全局变量deffoo():x=20# 这是局部变量,与全局 x 同名但无关print(x)# 输出 20foo()print(x)# 输出 10(全局 x 没变)本质:函数内有自己的局部命名空间,外部是全局命名空间。同名只是巧合,它们完全独立。 如果想在函数内修改全局变量,需要用global关键字。 核心目的:避免函数内部意外污染全局变量,实现代码隔离。==================================x=10# 全局变量deffoo():globalx x=20# 这是全局变量,与全局 x 同一个print(x)# 输出 20foo()print(x)# 输出 20

threading.local:线程局部存储

这是多线程环境下的数据隔离机制。每个线程访问同一个 local 对象时,看到的是属于该线程自己的数据副本

flask >>werkzeug.local.Local



协程资料

# 从 werkzeug.local 导入 Local 类(比 threading.local 功能更强,支持协程等)fromwerkzeug.localimportLocalimportthreadingimporttime# 创建一个 Local 对象,类似一个全局容器,每个线程/协程都能拥有独立的数据副本local_data=Local()defworker(worker_id):# 1. 在当前线程中设置自己的专属数据# 不同线程对同一个 local_data.user 的赋值不会互相干扰local_data.user=f"worker_{worker_id}"# 模拟一些耗时操作,让线程交错执行,验证数据隔离性time.sleep(0.1)# 2. 获取数据,验证其他线程是否干扰# 使用 getattr 避免属性不存在时报错(这里 user 一定存在,但演示安全获取方式)# getattr(object, name, default) 是 Python 内置函数,用于安全地获取对象的属性值,# 如果属性不存在则返回默认值(不会抛出 AttributeError)。# setattr(obj, 'attr', value) 等价于 obj.attr = value# hasattr(obj, 'attr') 检查属性是否存在,返回 bool# delattr(obj, 'attr') 删除属性# getattr(local_data, 'user', None) 等价 local_data.user if local_data.user else nonemy_user=getattr(local_data,'user',None)print(f"线程{worker_id}中的用户:{my_user}")threads=[]foriinrange(3):t=threading.Thread(target=worker,args=(i,))threads.append(t)t.start()fortinthreads:t.join()线程0中的用户:worker_0 线程2中的用户:worker_2 线程1中的用户:worker_1

python 多线程

thread

http://www.jsqmd.com/news/657208/

相关文章:

  • Android手把手编写儿童手机远程监控App之JAVA基础
  • 新建了一个微信群深圳技术交流群
  • CISSP 域6知识点 安全评估与测试策略
  • 测试深度策略
  • 3个步骤轻松掌握PhotoGIMP:从Photoshop无缝迁移到开源图像编辑的终极方案
  • Python小白该这样入门呢
  • 从‘新建’到‘流转’:手把手教你用JIRA问题单驱动敏捷开发全流程
  • # AI Agent爬虫深度解析:从规则驱动到目标驱动,爬虫技术的终局之战
  • 基于忆阻器的自适应神经形态脑机接口解码系统
  • 象州站计算机联锁工程设计复现
  • 为什么 await 没生效?
  • 免费解锁Cursor AI Pro完整功能:5分钟掌握专业级AI编程助手
  • 可跑在STM32上的EtherCAT主机协议栈
  • 告别编译地狱!用Python的TenSEAL库5分钟上手同态加密实战(CKKS方案)
  • Electron 摄像头打不开/锁死问题排查手册
  • WebDebugx移动端网页调试实用技巧大全
  • 深入解析基4 Booth算法在定点乘法器中的高效实现
  • 告别手动复制粘贴:用Makefile自动化你的Vivado DPU XO文件生成流程
  • 【智能代码生成×DevOps流水线实战指南】:20年SRE亲授5大高危集成陷阱与零故障落地路径
  • 企业级仓库管理实战:若依WMS现代化仓储解决方案深度解析
  • MicMac终极指南:免费开源摄影测量软件从入门到精通
  • 03华夏之光永存:黄大年茶思屋榜文解法「第6期第3题」异构算力协同的HPC+AI实时训练算法
  • 从‘硬’到‘软’:一个老电源工程师的软启动电路设计笔记(基于光耦与比较器的经典实现)
  • 图像压缩ONNX模型跨平台推理一致性问题解决方案
  • 告别HAL库和寄存器:用Arduino语法在Keil5里玩转STM32F103(附完整移植流程)
  • UE4/UE5 Runtime FBX导入:从零到一构建高效动态模型加载方案
  • Nuke Survival Toolkit:150+专业插件如何彻底改变你的视觉特效工作流程
  • 嵌入式Linux驱动开发
  • PyTorch Transformer从入门到实战:手把手教你搭建中英翻译系统(附完整代码)
  • 微信小程序消息订阅踩坑实录:uni-app中withSubscriptions参数的那些‘坑’与最佳实践