【问题标题】:SQLAlchemy Session handling in a multi thread app多线程应用程序中的 SQLAlchemy 会话处理
【发布时间】:2018-03-25 06:25:59
【问题描述】:

我像这样在模块级别定义我的数据模型

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine('cx_oracle://username:password@dsn')
Session = sessionmaker(bind=engine)

... data model located on engine

然后我开始一些这样的线程

threads = []

# start threads
for i in range(4):

    # each thread needs it own session
    thread = threading.Thread(target=fn, args=(in, ))
    thread.start()
    threads.append(thread)

# wait for threads to finish
for thread in threads:
    thread.join()

其中fn(in) 是我使用session = Session() 的一些方法,然后用于各种目的。

这样我会得到各种错误,这些错误只是有时会发生。可以

  • DatabaseError: (cx_Oracle.DatabaseError) DPI-1002: invalid OCI handle
  • DBAPIError: (sqlalchemy.exc.ResourceClosedError) This Connection is closed
  • InvalidRequestError: Session is already flushing

我真的不知道如何解决这个问题

【问题讨论】:

标签: python multithreading session sqlalchemy


【解决方案1】:

我们的应用程序和 cx_Oracle 6.x 一直存在一些类似问题,该版本已更新为使用 Oracle OCI (ODPI-C) 的新 C 接口,在其发行说明中对该错误有一些引用。我们降级了 cx_Oracle,问题就消失了。

【讨论】:

    猜你喜欢
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多