sqlalchemy
とMySQL
を使用しており、SQL式を使用してクエリを実行しています。多数のクエリを実行すると、タイムアウトします。 answer を見つけましたが、はっきりしません。誰か、私を助けてくれませんか?
TimeoutError:サイズ5のQueuePool制限、オーバーフロー10に達した、接続がタイムアウトした、タイムアウト30
コードで新しいセッションを作成するときは、必ずセッションを閉じてください。 session.close()
を呼び出すだけです
このエラーが発生したとき、すべてのセッションを閉じようとしていると思いましたが、慎重に調べたところ、そうでない新しい方法が1つありました。そのメソッドでセッションを閉じると、このエラーが修正されました。
マルチスレッドモードでは、同時リクエスト数が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()