web-dev-qa-db-ja.com

SQL Alchemy接続タイムアウト

sqlalchemyMySQLを使用しており、SQL式を使用してクエリを実行しています。多数のクエリを実行すると、タイムアウトします。 answer を見つけましたが、はっきりしません。誰か、私を助けてくれませんか?

TimeoutError:サイズ5のQueuePool制限、オーバーフロー10に達した、接続がタイムアウトした、タイムアウト30

42
Nazmul Hasan

コードで新しいセッションを作成するときは、必ずセッションを閉じてください。 session.close()を呼び出すだけです

このエラーが発生したとき、すべてのセッションを閉じようとしていると思いましたが、慎重に調べたところ、そうでない新しい方法が1つありました。そのメソッドでセッションを閉じると、このエラーが修正されました。

54
Greg

マルチスレッドモードでは、同時リクエスト数がdb接続プールのサイズよりもはるかに大きい場合、サイズ5のキュープールの制限がスローされ、オーバーフロー10に達したerrorになります。これで試してください:

engine = create_engine('mysql://', convert_unicode=True, 
pool_size=20, max_overflow=100)

to add the pool size

追加:上記の方法は正しい方法ではありません。実際の理由は、db接続プールが使い果たされ、他に使用可能な接続がないためです。最も可能性の高い状況は、接続を解放するのに失敗することです。例えば:

@app.teardown_appcontext
def shutdown_session(exception=None):
    db_session.remove()
12
Aaren Shar