相关疑难解决方法(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万
查看次数

这个Flask代码中的g对象是什么?

我发现这个代码g会对每个响应进行计时,但我不确定应该从哪里来.什么是g

@app.before_request
def before_request():
  g.start = time.time()

@app.teardown_request
def teardown_request(exception=None):
    diff = time.time() - g.start
    print diff
Run Code Online (Sandbox Code Playgroud)

python flask

7
推荐指数
1
解决办法
2374
查看次数

如何在python Flask中设置全局变量?

我想设置一个全局变量并将其用作各种功能的触发器。每个用户都有一个单独的全局变量。这用于跟踪以前的消息数据并进行对话。问题是如何为每个用户管理一个单独的全局变量?一旦我将它部署到服务器中,该应用程序就会运行。当我尝试更改全局变量时,此变量适用于每个用户,而不仅仅是触发其更改的单个用户。

我正在使用没有数据库的 python 烧瓶。

谢谢你。

python global-variables flask web server

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

flask ×3

python ×3

global-variables ×1

server ×1

thread-safety ×1

web ×1