2

我实际上是在使用 SQLAlchemy 和 MySQL 和 Pyro 来制作服务器程序。许多客户端连接到此服务器以发出请求。这些程序仅提供来自数据库 MySQL 的信息,有时还会进行一些计算。

为每个客户端创建一个会话还是为每个客户端使用相同的会话更好?

4

2 回答 2

2

你想要的是一个scoped_session.

好处是(与客户端之间的单个共享会话相比):

  • 无需锁定
  • 支持的交易
  • 到数据库的连接池(由 SQLAlchemy 隐式完成)

如何使用它

您只需创建scoped_session

Session = scoped_session(some_factory)

并在您的 Pyro 方法中访问它:

class MyPyroObject():
    def remote_method(self):
         Session.query(MyModel).filter...

在幕后

上面的代码保证了 Session 是根据需要创建和关闭的。会话对象在您第一次在线程中访问时立即创建,并将在线程完成后被删除/关闭(ref)。由于每个 Pyro 客户端连接在默认设置下都有自己的线程(不要更改它!),每个客户端将有一个会话。

于 2013-01-18T10:24:54.237 回答
-1

我能尝试的最好的方法是在每个客户的请求中创建新的会话。我希望表演不会受到惩罚。

于 2013-01-16T14:14:17.383 回答