私は実際にMySQLとPyroでSQLAlchemyを使用してサーバープログラムを作成しています。多くのクライアントがこのサーバーに接続してリクエストを行います。プログラムはデータベース MySQL からの情報のみを提供し、時にはいくつかの計算を行います。
クライアントごとにセッションを作成するのと、すべてのクライアントに同じセッションを使用するのとではどちらがよいですか?
私は実際にMySQLとPyroでSQLAlchemyを使用してサーバープログラムを作成しています。多くのクライアントがこのサーバーに接続してリクエストを行います。プログラムはデータベース MySQL からの情報のみを提供し、時にはいくつかの計算を行います。
クライアントごとにセッションを作成するのと、すべてのクライアントに同じセッションを使用するのとではどちらがよいですか?
あなたが欲しいのはですscoped_session
。
利点は次のとおりです (クライアント間の単一の共有セッションと比較して):
それの使い方
以下を作成するだけですscoped_session
。
Session = scoped_session(some_factory)
Pyro メソッドでアクセスします。
class MyPyroObject():
def remote_method(self):
Session.query(MyModel).filter...
舞台裏
上記のコードは、必要に応じてセッションが作成され、閉じられることを保証します。セッションオブジェクトは、スレッドで初めてアクセスするとすぐに作成され、スレッドが終了すると削除/閉じられます ( ref )。各 Pyro クライアント接続はデフォルト設定で独自のスレッドを持っているため (変更しないでください!)、クライアントごとに 1 つのセッションがあります。
私が試すことができる最善の方法は、すべてのクライアントの要求で新しいセッションを作成することです。パフォーマンスにペナルティがないことを願っています。