基于scopedsession实现线程安全

技术基于scopedsession实现线程安全 基于scoped_session实现线程安全一、基于scoped_session实现线程安全
from sqlalchemy.orm import ses

基于作用域_会话实现线程安全

一、基于scoped_session实现线程安全

来自sqlalchemy.orm导入sessionmaker

从sqlalchemy导入创建引擎

从sqlalchemy.orm导入作用域会话

从模型导入用户

engine=create _ engine(' MySQL pymysql ://root :123 @ 127。0 .0 .1:3306/db _ flask ',max_overflow=0,pool_size=5)

会话=会话创建者(绑定=引擎)

'''

# 线程安全,基于本地线程实现每个线程用同一个会议

# 特殊的:作用域_会话中有原来方法的会议中的一下方法:

public_methods=(

__包含“__”、“__iter__”、“add”、“add_all”、“begin”、“begin_nested”,

关闭','提交','连接','删除','执行','过期,

expire_all ',' expect ge ',' expect ge _ all ',' flush ',' get_bind ',

is_modified ',' bulk_save_objects ',' bulk_insert_mappings ',

批量_更新_映射,

合并','查询','刷新','回滚,

"标量"

)

'''

#作用域_会话类并没有继承会话,但是却又它的所有方法

会话=作用域_会话(会话)

# ############# 执行ORM操作#############

obj1=用户(名称='randy ')

session.add(obj1)

# 提交事务

session.commit()

# 关闭会议

session.close()

二、底层实现原理

2.1作用域_会话进入类

从sqlalchemy.orm导入作用域会话

会话=作用域_会话(会话)

用于会话中的方法public_methods:

setattr(scoped_session,方法,仪器(方法))

public_methods=(

__包含_ _ ',

__iter__ ',

添加,

add_all ',

开始,

begin_nested ',

关闭,

提交,

连接,

删除,

执行,

过期,

expire_all ',

删除,

'全部删除,

齐平,

get_bind ',

is_modified ',

bulk_save_objects ',

大容量插入映射,

批量_更新_映射,

合并,

查询,

刷新,

回滚,

标量,

)

首先进入点击作用域_会话进入作用域_会话类查看如下内容

用于会话中的方法public_methods:

setattr(scoped_session,方法,仪器(方法))

为scoped_sesion类设置属性

公共方法中内容:

这是在会议类中的内容

public_methods=(

__包含_ _ ',

__iter__ ',

添加,

add_all ',

开始,

begin_nested ',

关闭,

提交,

连接,

删除,

执行,

过期,

expire_all ',

删除,

'全部删除,

齐平,

get_bind ',

is_modified ',

bulk_save_objects ',

大容量插入映射,

批量_更新_映射,

合并,

查询,

刷新,

回滚,

标量,

)

setattr(scoped_session,方法,仪器(方法))这句中的工具是一个闭包函数

改闭包函数中实现了对数据库中具体操作

self.registry()中实现如下,为其实现了一个线程

类作用域_会话(对象):

会话工厂=无

def __init__(self,session_factory,scopefunc=None):

自我。会话工厂=会话工厂

if scopefunc:

自我。registry=ScopedRegistry(session _ factory,scopefunc)

else:

自我。注册表=线程本地注册表(会话工厂)

线程内容如下,最终利用线程中的本地()模块中实现线程的安全,也就是操作数据的安全:

类threadlocalregistry(ScopedRegistry):

def __init__(self,createfunc):

self.createfunc=createfunc

self.registry=threading.local()

总结:

会话=作用域_会话(会话)这个会议是那一个操作过来就是哪一个操作,只操作自己对数据的操作,从而保证了线程的安全

在当下的阶段,必将由程序员来主导,甚至比以往更甚。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/74733.html

(0)

相关推荐

  • 如何使用iOS实现仿高德首页推拉效果

    技术如何使用iOS实现仿高德首页推拉效果这篇文章主要介绍了如何使用iOS实现仿高德首页推拉效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。上面是实现的效

    攻略 2021年11月12日
  • Ubuntu14.04 BLAS如何安装

    技术Ubuntu14.04 BLAS如何安装这篇文章主要介绍了Ubuntu14.04 BLAS如何安装,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。环境系

    攻略 2021年11月15日
  • 蛋糕不蓬松的原因,蛋糕做出来会塌不泡是什么原因

    技术蛋糕不蓬松的原因,蛋糕做出来会塌不泡是什么原因蛋糕的膨发情况就与蛋白打发状态息息相关。蛋糕烤出来回缩蛋糕不蓬松的原因、总是膨发不起来是因为蛋白打发不到位,所以就算加了泡打粉也膨胀不起来。蛋糕塌陷!大家都知道热胀冷缩的

    生活 2021年10月30日
  • 四年级数学计算题100道,求各位要四年级的计算题200道

    技术四年级数学计算题100道,求各位要四年级的计算题200道脱式计算100道简算100道(1)67+42+33+58(2)258-58-26-74(3)125×16(4)50×(2×4)×25(5)7×8×3×125(6

    生活 2021年10月28日
  • 为什么推荐网站迁移到香港云服务器

    技术为什么推荐网站迁移到香港云服务器香港云服务器将物理服务器集群拆分为许多虚拟块,每个用户收到一个虚拟段。使用云服务器能够提高网站安全性,并最大限度地减少了来自其他网站的干扰。香港云服务器比虚拟服务器更昂贵,但它提供了更

    礼包 2021年11月17日
  • 基于linux2.6.12.1的进程睡眠原理是什么

    技术基于linux2.6.12.1的进程睡眠原理是什么这篇文章给大家介绍基于linux2.6.12.1的进程睡眠原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。进程是一个动态的实体,满足条件

    攻略 2021年12月3日