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

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

我正在处理一个Flask项目,我希望在滚动时让索引加载更多内容.我想设置一个全局变量来保存页面加载的次数.我的项目结构如下:

???run.py
???app
   ???templates
   ???_init_.py
   ???views.py
   ???models.py
Run Code Online (Sandbox Code Playgroud)

首先,我将全局变量声明为_init_.py:

global index_add_counter
Run Code Online (Sandbox Code Playgroud)

和Pycharm警告说 Global variable 'index_add_counter' is undefined at the module level

views.py:

from app import app,db,index_add_counter
Run Code Online (Sandbox Code Playgroud)

而且有 ImportError: cannot import name index_add_counter

我还引用了global-variable-and-python-flask 但是我没有main()函数.在Flask中设置全局变量的正确方法是什么?

python flask

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

标签 统计

flask ×2

python ×2

thread-safety ×1