我实际上是在使用 SQLAlchemy 与 MySQL 和 Pyro 来制作服务器程序。许多客户端连接到此服务器以发出请求。程序只提供MySQL数据库的信息,有时会做一些计算。
为每个客户创建一个 session 还是为每个客户使用相同的 session 更好?
最佳答案
你想要的是一个scoped_session
.
好处是(与客户端之间的单个共享 session 相比):
- 无需锁定
- 支持的交易
- 到数据库的连接池(由 SQLAlchemy 隐式完成)
如何使用它
您只需创建 scoped_session
:
Session = scoped_session(some_factory)
并在你的 Pyro 方法中访问它:
class MyPyroObject():
def remote_method(self):
Session.query(MyModel).filter...
幕后花絮
上面的代码保证 session 根据需要创建和关闭。 session 对象会在您第一次在线程中访问它时创建,并在线程完成后被删除/关闭(ref)。由于每个 Pyro 客户端连接在默认设置下都有自己的线程(不要更改它!),每个客户端将有一个 session 。
关于mysql - 使用 sqlalchemy 和 pyro 进行 session 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14334561/