栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SQLAlchemy的多线程使用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQLAlchemy的多线程使用

会话对象 不是 线程安全的,而是 线程本地的
。从文档:

“该

Session
对象被完全设计为以 非并发 方式使用,就多线程而言,这意味着“一次仅在一个线程中”
..某些进程需要就位,以免跨多个线程进行多调用实际上获得了同一个会话的句柄。我们将此概念 线程 称为 本地存储 。”

如果您不想自己完成管理线程和会话的工作,SQLAlchemy的

ScopedSession
对象可以为您解决这个问题:

ScopedSession
默认情况下,该对象使用threading.local()作为存储,以便
Session
为所有调用
ScopedSession
注册表的人维护一个,但仅在单个线程的范围内。在另一个线程中调用注册表的调用者将获得另一个线程本地的Session实例。

使用这种技术,

ScopedSession
可以在应用程序中提供一种快速且相对简单的方式来提供单个全局对象,该对象可以安全地从多个线程中调用。

请参阅上下文/本地线程会话中的示例,以设置自己的线程安全会话:

# set up a scoped_sessionfrom sqlalchemy.orm import scoped_sessionfrom sqlalchemy.orm import sessionmakersession_factory = sessionmaker(bind=some_engine)Session = scoped_session(session_factory)# now all calls to Session() will create a thread-local sessionsome_session = Session()# you can now use some_session to run multiple queries, etc.# remember to close it when you're finished!Session.remove()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/638945.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号