python多线程 执行sql_python-SQLAlchemy的多线程使用

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

“ 2952092370503903992320对象完全被设计为以非并发方式使用,就多线程而言,这意味着“一次仅在一个线程中” ..需要适当的处理,以使跨多个线程的多重调用不会发生。 实际上无法获得同一个会话的句柄。我们将此概念线程称为本地存储。”

如果您不想自己完成管理线程和会话的工作,SQLAlchemy提供了2952092370503903992320对象来为您解决这个问题:

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

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

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

# set up a scoped_session

from sqlalchemy.orm import scoped_session

from sqlalchemy.orm import sessionmaker

session_factory = sessionmaker(bind=some_engine)

Session = scoped_session(session_factory)

# now all calls to Session() will create a thread-local session

some_session = Session()

# you can now use some_session to run multiple queries, etc.

# remember to close it when you're finished!

Session.remove()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值