【问题标题】:python sqlalchemy parallel operationpython sqlalchemy 并行操作
【发布时间】:2010-11-10 04:37:32
【问题描述】:

你好,我有一个多线程程序,所有线程都将在 oracle 上运行 D B。那么,sqlalchemy 是否可以在 oracle 上支持并行操作呢?

tks!

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

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

    【讨论】:

    • tks,因为oracle官方文档说你应该启用一些东西(还不知道“东西”是什么......)让oracle使用并行能力..我应该在sqlalchemy中做什么?
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-14
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多