使用flask-sqlalchemy写代码码到一半,突然想到,Session是否是线程安全的?于是上官方文档,答案是否!

那问题来了,怎么破?因为它会牵涉到多线程情况下,调用rollback导致的不可预期影响。

官网给了两个方案:

使用 Contextual/Thread-local Sessions

不用全局的,而是采用函数间传递的session变量

明显,第一种方式对现在代码的改动最小,扩展性也更好。因为使用的flask-sqlalchemy,于是参考在线文档 ,发现table的定义与flask-sqlalchemy quickstart的定义不一致。文档里面有一句有趣的话

a preconfigured scoped session called session

那是否意味着 flask-sqlalchemy 对 sqlachemy 封装之后,将session做了多线程支持的封装?看源码!

classSQLAlchemy(object):

def __init__(self, app=None, use_native_unicode=True, session_options=None, metadata=None):

if session_options isNone:

session_options ={}

session_options.setdefault('scopefunc', connection_stack.__ident_func__)

self.use_native_unicode =use_native_unicode

self.session =self.create_scoped_session(session_options)

self.Model =self.make_declarative_base(metadata)

self.Query =BaseQuery

self._engine_lock =Lock()

self.app =app

_include_sqlalchemy(self)

if app is notNone:

self.init_app(app)

self.session = self.create_scoped_session(session_options)

从这个变量赋值来看,就是scoped_session,为以防万一,再跟进去看

def create_scoped_session(self, options=None):

"""Helper factory method that creates a scoped session. It

internally calls :meth:`create_session`.

"""

if options isNone:

options ={}

scopefunc = options.pop('scopefunc', None)

returnorm.scoped_session(partial(self.create_session, options),

scopefunc=scopefunc)

把这个代码与sqlalchemy的官方scope_session例子对比

from sqlalchemy.orm import scoped_session

from sqlalchemy.orm import sessionmaker

session_factory = sessionmaker(bind=some_engine)

Session = scoped_session(session_factory)

完全一致!

所以,db.session是线程安全的,并且对sqlalchemy做了非常好的封装,便捷性更上一层楼,放心用吧!

Flask和mysql多线程_数据库连接池Flask-SQLAlchemy中多线程安全的问题相关推荐

  1. jndi mysql数据库_数据库连接池技术中dbcp、c3p0、jndi

    数据库连接池技术中dbcp.c3p0.jndi 发布时间:2020-05-26 08:52:33 来源:51CTO 阅读:371 作者:ikilun 不管通过何种持久化技术,都必须通过数据连接访问数据 ...

  2. 【Python SQLAlchemy】数据库连接池SQLAlchemy中多线程安全的问题

    问题描述 写了一个apscheduler定时任务 里面用到SQLAlchemy在同一时间点开启了18个任务,用于更新18个表 但是最终看数据库表的时候,发现有2个表未更新.查看打印日志均正常,查找原因 ...

  3. mysql事务锁导致tomcat崩溃_数据库连接池连接耗尽,导致tomcat请求无响应,呈现出假死状态...

    最困难的事情就是认识自己! 个人网站 ,欢迎访问! 前言:最近,测试部门的同事找到我,说他们测试时,没一会就发现服务接口请求一直无响应,Tomcat跟死掉了一样,也没有返回任何的错误响应,说让我赶紧排 ...

  4. gc问题mysql连接池_数据库连接池引起的FullGC问题,看我如何一步步排查、分析、解决...

    问题现象 在某个工作日,突然收到线上的服务告警,有大量的请求延时产生,查看线上服务发现基本上都是获取数据库连接超时,而且影响时间只有3~4秒钟,服务又恢复了正常.隔了几分钟之后,又出现了大量的告警,还 ...

  5. druid mysql 配置优化_数据库连接池优化配置(druid,dbcp,c3p0)

    考虑因素 1:当前连接DB的规模   2:并发情况 3:执行db的响应时间 配置考虑 1:初始化连接:可考虑设置为3个连接 .对于db规模特别大的情况下可考虑设置为1个.避免启动时间过长: 2:最小连 ...

  6. mysql dbcp 配置文件_数据库连接池DBCP使用方式

    数据库连接池DBCP使用方式 概念 开源数据源实现,使用这些数据库连接池后,我们在项目开发中就不需要编写连接数据库的代码了. 开源数据源包含DBCP.C3P0.Druid等 DBCP Java使用实例 ...

  7. mysql连接池和最大连接数_数据库连接池和mysql的最大连接数的区别

    什么叫做数据库连接池 连接池的作用是什么? 数据库连接池,简称dbcp database connection pool 存在意义: 数据库的连接是非常耗费系统资源的,一个应用通常都是需要与数据库打交 ...

  8. c mysql 关闭连接池_数据库连接池关闭的时间

    上一篇说到分析关闭连接与不关闭连接的性能,到后来我发现自己得出的结论有误.经过多次测试发现关闭连接和不关闭连接耗费的时间基本一样.进哥也说了这是有连接池的原因.其实,自己以前对Ado.net了解的不深 ...

  9. c3p0 mysql 连接池配置文件_数据库连接池c3p0的使用

    原标题:数据库连接池c3p0的使用 来源:java联盟 https://mp.weixin.qq.com/s/5Tbkf8dVFfH8AvtqWl-7Xg 程序员共读整理发布,转载请联系作者获得授权 ...

最新文章

  1. jquery倒计时插件可自定义多个倒计时间
  2. [译]JavaScript中,{}+{}等于多少?
  3. C#.NET学习笔记---C#中的条件编译
  4. 解决Ubuntu中sublime无法输入中文的问题
  5. Visual Studio2019 应用程序无法正常启动0xc000007b
  6. Android应用--简、美音乐播放器获取专辑图片(自定义列表适配器)
  7. Linux操作系统下软件的安装方法大全
  8. python工具包_python 工具包
  9. c#erp项目源码 mysql_Jsp+Ssm+Mysql实现图书馆预约占座管理系统项目源码(可带论文文档)...
  10. 深入理解C#:编程技巧总结(一)
  11. 设置IIS会话过期时间
  12. SpringBoot使用Mina框架进行服务端与客户端数据通信
  13. 深入理解傅里叶变换的性质:实函数、卷积、相关、功率谱、频响函数
  14. app 服务器 运营 维护,app服务器维护
  15. 好用的码字软件,年入百万的大神作家们都在用
  16. [含lw+源码等]微信小程序在线考试管理系统+后台管理系统[包运行成功]
  17. 修改Android系统配置文件build.prop
  18. SVN版本库备份和恢复
  19. 安卓zip解压软件_纯C语言编写的开源免费解压压缩软件——拥有极致性能的 7-zip...
  20. 如何用python查看pyc文件_如何理解.pyc文件内容

热门文章

  1. BUG! exception in phase semantic analysis in source unit
  2. SAP Spartacus自定义Component的Not found问题
  3. SAP Spartacus的Component 请求
  4. 如何创建依赖于某时间段的ABAP视图
  5. Groovy里的setProperty和getProperty重载用法
  6. ABAP内表在ABAP 740后支持的filter操作
  7. Why Opportunity uses US as local instead of ZH - language determination in
  8. Reuse library debug in Chrome - phase3 exchange drop down list
  9. SAP Marketing Cloud功能简述(四) : 线索和客户管理
  10. How is ABAP keyword highlight implemented in Chrome