我正在编写一个小 flask 应用程序,并使用pyrserve将其连接到rserve。我希望每个会话都启动并维护自己的rserve连接。
大概是这样的:
session['my_connection'] = pyRserve.connect()
无法工作,因为连接对象不可json序列化。另一方面,类似这样的情况:
flask.g.my_connection = pyRserve.connect()
不起作用,因为它不会在请求之间持久化。更困难的是,pyrserve似乎没有为连接提供任何标识符,因此我无法在会话中存储连接id,并在每次请求之前使用该id检索正确的连接。
有没有一种方法可以实现每个会话都有一个唯一的连接?
1条答案
按热度按时间muk1a3rh1#
以下内容适用于您不希望为每个请求重新创建的任何全局python数据,而不仅仅是rserve,也不仅仅是每个用户独有的数据。
我们需要一些公共位置来为每个用户创建一个rserve连接。最简单的方法是运行
multiprocessing.Manager
作为一个单独的过程。在启动应用程序之前运行它,以便管理器可用:
我们可以使用一个简单的功能在请求期间从应用程序访问此管理器。这假设您在会话中获得了“user_id”的值(例如,flask登录就是这样做的)。这最终会使rserve连接在每个用户而不是每个会话中都是唯一的。
在视图中访问它:
这应该可以让你开始,尽管还有很多可以改进的地方,比如不硬编码地址和密码,不丢弃与管理器的连接。这是用Python3编写的,但应该可以用Python2。