相关疑难解决方法(0)

烧瓶中的全局变量是否安全?如何在请求之间共享数据?

在我的应用程序中,通过发出请求来更改公共对象的状态,响应取决于状态.

class SomeObj():
    def __init__(self, param):
        self.param = param
    def query(self):
        self.param += 1
        return self.param

global_obj = SomeObj(0)

@app.route('/')
def home():
    flash(global_obj.query())
    render_template('index.html')
Run Code Online (Sandbox Code Playgroud)

如果我在我的开发服务器上运行它,我希望得到1,2,3等等.如果同时向100个不同的客户提出请求,可能出现问题吗?预期的结果是100个不同的客户端每个都看到1到100之间的唯一数字.或者会发生这样的事情:

  1. 客户端1查询.self.param增加1.
  2. 在可以执行return语句之前,线程切换到客户端2. self.param再次递增.
  3. 线程切换回客户端1,然后客户端返回数字2,比如说.
  4. 现在线程移动到客户端2并返回他/她的数字3.

由于只有两个客户端,预期结果为1和2,而不是2和3.跳过了一个数字.

当我扩展我的应用程序时,这会发生吗?我应该看一下全局变量的替代方案?

python thread-safety flask

70
推荐指数
4
解决办法
2万
查看次数

如何在每个会话中存储唯一的Rserve连接?

我正在编写一个小型Flask应用程序,并使用pyRserve将其连接到Rserve.我希望每个会话都启动,然后维护自己的Rserve连接.

像这样的东西:

session['my_connection'] = pyRserve.connect()
Run Code Online (Sandbox Code Playgroud)

不起作用,因为连接对象不是JSON可序列化的.另一方面,这样的事情:

flask.g.my_connection = pyRserve.connect()
Run Code Online (Sandbox Code Playgroud)

不起作用,因为它不会在请求之间保持不变.为了增加难度,似乎pyRserve似乎没有为连接提供任何标识符,因此我无法在会话中存储连接ID,并在每次请求之前使用它来检索正确的连接.

有没有办法完成每个会话的唯一连接?

python r flask rserve pyrserve

6
推荐指数
1
解决办法
3253
查看次数

标签 统计

flask ×2

python ×2

pyrserve ×1

r ×1

rserve ×1

thread-safety ×1