flask之 scoped实现线程安全.py

news/2025/1/15 18:10:49/文章来源:https://www.cnblogs.com/dgp-zjz/p/18673567

1、用法

导入模块,将Session传入scoped_session即可

from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session
from models import Users
from threading import local
engine = create_engine("mysql+pymysql://root:lqz123?@127.0.0.1:3306/sqlalchemy01", max_overflow=0, pool_size=5)
Session = sessionmaker(bind=engine)"""
# 线程安全,基于本地线程实现每个线程用同一个session
# 特殊的:scoped_session中有原来方法的Session中的一下方法:public_methods = ('__contains__', '__iter__', 'add', 'add_all', 'begin', 'begin_nested','close', 'commit', 'connection', 'delete', 'execute', 'expire','expire_all', 'expunge', 'expunge_all', 'flush', 'get_bind','is_modified', 'bulk_save_objects', 'bulk_insert_mappings','bulk_update_mappings','merge', 'query', 'refresh', 'rollback','scalar'
)
"""
# session=Session() # 不是线程安全---》多线程并发情况下---》用的是同一个,就会出现混乱
#scoped_session类并没有继承Session,但是却又它的所有方法# 以后在多线程,协程情况下,使用这个session,就没有并发安全的问题
# 原理是什么? 内部使用了threading包下local对象,   local.session  在不同线程下执行这个取值或赋值,使用的都是当前线程自己的# 线程1   local.a=100  后续的操作中--->取local.a--->永远是当时这条线程中放进去的a ,也就是100
# 线程2   local.a=999   --->取local.a--->永远是当时这条线程中放进去的a ,也就是999#local对象如何实现的线程安全呢? 内部维护了一个字典,字典的key是线程id号,value值是
# l=local()  #  {}
# # 线程1
# l.session=线程1的session  # {线程1的id号:{session:新session}}
#
# # 线程2
# l.session# {线程1的id号:{session:新session},线程2的id号:{session:线程2的session}}# 本质就是,不同线程,使用自己线程的那个session
# scoped_session 不是Session类的对象,但是他有 Session类对象的所有方法----》通过装饰器,装进去的
session = scoped_session(Session)
# ############# 执行ORM操作 #############
obj1 = Users(name="lqz4",email='3533@qq.com')
session.add(obj1)# 提交事务
session.commit()
# 关闭session
session.close()

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/869718.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python Playwright学习笔记(一)

一、简介 1.1Playwright 是什么? 它是微软在 2020 年初开源的新一代自动化测试工具,其功能和 selenium 类似,都可以驱动浏览器进行各种自动化操作。 1.2、特点是什么支持当前所有的主流浏览器,包括 chrome、edge、firefox、safari; 支持跨平台多语言:支持Windows、Linux、…

智能驾驶数据采集回注测评工具 - ARS

在数据驱动智能驾驶的时代背景下,开发者们总结了一条适用于智能驾驶的数据闭环开发流程,这条开发线路大致包括实车数据采集->数据存储->数据处理->数据分析->数据标注->模型训练->仿真测试->实车测试->部署发布等关键环节,通过不断开发迭代,逐步完…

2025.1.15 学习

2025.1.15 学习 api开放平台 我们希望在后端使用Http请求调用接口,应该怎么做呢 可以用Hutool工具库中的Http请求工具类,使用如下: public class ApiClient {public String getNameByGet(String name){HashMap<String, Object> paramMap = new HashMap<>();para…

2024龙信年终技术考核

1. 分析手机备份文件,该机主的QQ号为?(标准格式:123) 看了下,备份里没有QQ,但是有微信,所以应该是微信绑定的QQ号(早期微信推广时可以用QQ直接注册登录)经过测试,对应的是这个结果为1203494553 2. 分析手机备份文件,该机主的微信号为?(标准格式:abcdefg)结果为…

Dex文件结构】ReadDex解析器实现

# APP加壳脱壳 # DEX文件结构 近期学习DEX文件结构为学习APP加壳脱壳打基础,自实现了一个简易的DEX解析器加深理解。DEX文件结构整体看不复杂,深究时发现DexCLassDef结构非常复杂,编码的数据结构,嵌套和指向关系。本文作为近期学习的一个阶段总结以及知识分享,后期再完…

记录---浏览器多窗口通信有效实践总结

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣如何跨越不同窗口通信 在现代 Web 开发中,多个窗口或标签页之间的通信成为了越来越常见的需求,尤其是在应用需要同步数据、共享状态或进行实时更新的场景中。不同窗口间的通信方式有很多种,选择合适的方式可以大大提高…

python 按时间戳删除3232数组的前2列和后9列

还是雨滴谱文件,这次尝试批量处理 首先处理1个单独的txt文件#!usr/bin/env python # -*- coding:utf-8 _*- """@author:Suyue @file:raindrop.py @time:2025/01/15 {DAY} @desc: """ import numpy as np import redef process_file(input_file,…

电源中TL431及光耦的实战运用

首先了解一下TL431的基本原理;由一个运放及三极管组成;运放的应用前文略有几笔,此处未加反馈,运放只需要同相端与反相端做差在输出对应电压即可,而三极管是电压驱动;当VREF>2.5V即同相端大于反相端,输出正电压,三极管导通,当VREF<2.5V即同相端小于反相端,输出负…

在OERV也可以玩MC(下)

话接上回,上期讲述了在OERV安装HMCL的历程,这期讲讲HMCL的打包。Show openEuler:24.09 / HMCL - 开源软件构建与测试。在这个网站里,可以看到有好几个文件,这些都跟HMCL打包有关。 第一个是_service文件,这个文件用于从特定仓库里面拉取代码文件到当前平台,可以看见每个文…

JS-38 对象概述

什么是对象?对象(object)是JavaScript语言的核心概念,也是最重要的数据类型 简单说,对象就是一组“键对值”(key-value)的合集,是一种无序的复合数据集合 var user={ name:zifuchuan, age:13 };对象的每一个键名又称为属性(property),它的“键值”可以是任何数据类型…

第八届工业信息安全技能大赛全国复赛snake_wp

pwn题 snake writeup多少有点不自信,太久没做题,看到题都有点怕怕的这个程序是一个贪食蛇游戏,主程序如下: __int64 __fastcall main_4015A5(__int64 a1, __int64 a2) {int v2; // edxint v3; // ecxint v4; // er8int v5; // er9int v7; // [rsp+Ch] [rbp-4h]sub_400B6D()…