我有一个多线程应用程序,其中踏板处理使用sqlalchemy获取的一些对象。这些对象放在一个线程队列中,线程从这个队列中进行轮询。
在主线程中我这样做:
feeds = db_session.query(Feed).filter(Feed.last_checked <= int(update_time)).all()
for feed in feeds:
self.feed_q.put(feed)
在线程中,我对feed对象进行了一些更新,并且在进行更新时有时会一直得到这些异常:
ProgrammingError: (ProgrammingError) (2014, "Commands out of sync; you can't run this command now")
StatementError: Can't reconnect until invalid transaction is rolled back (original cause: InvalidRequestError: Can't reconnect until invalid transaction is rolled back)
我知道这与共享相同数据库会话的线程有一些共同点,但我不知道如何解决这个问题。
答案 0 :(得分:1)
每个线程都应该有一个单独的数据库会话。您可能正在创建最终存储在db_session
某处的对象,可能是这样的:
db_session = Session()
基本上,您需要每个线程都有自己的db_session
。