1

我有一个多线程应用程序,其中的踏板适用于使用 sqlalchemy 获取的一些对象。对象被放入线程轮询的线程队列中。

在主线程中我这样做:

feeds = db_session.query(Feed).filter(Feed.last_checked <= int(update_time)).all()
for feed in feeds:
    self.feed_q.put(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)

我知道这与共享同一数据库会话的线程有关,但我不知道如何解决这个问题。

4

1 回答 1

1

每个线程都应该有一个单独的数据库会话。您可能正在创建最终存储在db_session某处的对象,可能是这样的:

db_session = Session()

本质上,您需要每个线程都有自己的db_session.

于 2013-05-19T00:44:57.807 回答