【发布时间】: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 handleDBAPIError: (sqlalchemy.exc.ResourceClosedError) This Connection is closedInvalidRequestError: Session is already flushing
我真的不知道如何解决这个问题
【问题讨论】:
-
请提供minimal reproducible example,尤其是
fn的内容。
标签: python multithreading session sqlalchemy