SQLAlchemyのStaticPoolって何?

エージェントが書いたコードを読みながら、処理内容を理解しています。SQLAlchemyのStaticPoolとは何か、を調べる機会がありましたので、記録しておきます。

前提として、SQLAlchemyには、接続管理の機能が内包されています。sqlalchemy.pool モジュールにその機能があります。コネクションプーリングを想像しますね。

というか公式ドキュメントを見ると、「Connection Pooling」と明記されています。

https://docs.sqlalchemy.org/en/20/core/pooling.html

その中に次のようなクラスがあります。

  • QueuePool
    • 決まった数の接続をキューで管理し、貸し出し・返却する。
    • 本番で利用されることを想定したクラスです。
  • NullPool
    • 接続をプールせず、毎回開いて毎回閉じます。
    • コネクションプーリングを無効化するためのクラスです。
  • StaticPool
    • プロセス全体で1本の接続を共有するためのクラスです。
    • マルチスレッドで動く場合でも、同じ接続が共有されます。
  • SingletonThreadPool
    • スレッドごとに1本の接続を保持します。
    • SQLAlchemyでSQLiteを選択すると、デフォルトはこちらが利用されます。
  • AssertionPool
    • デバッグ用のクラスです。
    • 同時に2つ以上checkoutされたらエラーが発生します。

実際のコードはこの辺にあります。 ConnectionFairy という概念が登場するのが印象的です。

https://github.com/sqlalchemy/sqlalchemy/blob/main/lib/sqlalchemy/pool/impl.py

StaticPoolingは、SQLiteのインメモリDBを使う場面でよく使われます。

類似投稿

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です