我实际上是在使用 SQLAlchemy 和 MySQL 和 Pyro 来制作服务器程序。许多客户端连接到此服务器以发出请求。这些程序仅提供来自数据库 MySQL 的信息,有时还会进行一些计算。
为每个客户端创建一个会话还是为每个客户端使用相同的会话更好?
我实际上是在使用 SQLAlchemy 和 MySQL 和 Pyro 来制作服务器程序。许多客户端连接到此服务器以发出请求。这些程序仅提供来自数据库 MySQL 的信息,有时还会进行一些计算。
为每个客户端创建一个会话还是为每个客户端使用相同的会话更好?
你想要的是一个scoped_session
.
好处是(与客户端之间的单个共享会话相比):
如何使用它
您只需创建scoped_session
:
Session = scoped_session(some_factory)
并在您的 Pyro 方法中访问它:
class MyPyroObject():
def remote_method(self):
Session.query(MyModel).filter...
在幕后
上面的代码保证了 Session 是根据需要创建和关闭的。会话对象在您第一次在线程中访问时立即创建,并将在线程完成后被删除/关闭(ref)。由于每个 Pyro 客户端连接在默认设置下都有自己的线程(不要更改它!),每个客户端将有一个会话。
我能尝试的最好的方法是在每个客户的请求中创建新的会话。我希望表演不会受到惩罚。