0

嗨,我有一个多线程程序,所有线程都将在 oracle DB 上运行。那么,sqlalchemy 能支持在 oracle 上的并行操作吗?

谢谢!

4

2 回答 2

4

OCI(oracle客户端接口)有一个参数OCI_THREADED,它具有连接被互斥的效果,这样通过多个线程的并发访问是安全的。这可能是您看到的文档所指的设置。

cx_oracle,它本质上是一个 Python->OCI 桥,使用关键字参数“线程”在其连接函数中提供对此设置的访问,在http://cx-oracle.sourceforge.net/html/module.html#cx_Oracle 中进行了描述。连接。文档声明它默认为 False,因为它会导致“10-15% 的性能损失”,尽管没有提供此信息的来源(并且性能统计数据通常应该被视为可疑的规则)。

就 SQLAlchemy 而言,SQLAlchemycx_oracle提供的方言默认将此值设置为 True,并且可以在通过 create_engine() 设置引擎时将其设置回 False - 因此在该级别没有问题。

但除此之外,SQLAlchemy 推荐的使用模式(即每个线程一个会话,将连接保持在池中,并根据需要由函数签出)在任何情况下都阻止对连接的并发访问。因此,如果遵循常规使用模式,您可能会关闭 create_engine() 上的“线程”设置并享受可能有形的性能提升。

于 2009-07-24T03:09:36.033 回答
1

只要每个并发线程都有自己的会话,就可以了。尝试使用一个共享会话会遇到麻烦。

于 2009-07-13T03:29:59.877 回答