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)

これは、同じ DB セッションを共有するスレッドと関係があることは理解していますが、これを修正する方法がわかりません。

4

1 に答える 1

1

各スレッドには、個別のデータベース セッションが必要です。おそらく次のように、最終的にdb_sessionどこかに保存されるオブジェクトを作成しているでしょう。

db_session = Session()

基本的に、各スレッドには独自のdb_session.

于 2013-05-19T00:44:57.807 に答える