修改python flask应用程序

时间:2015-08-17 22:47:02

标签: python variables flask global

我有一个Python烧瓶网页应用,需要在多个请求之间共享一个全局变量。应用程序长时间运行,全局变量的值偶尔会发生变化。

这是代码的样子......

app.py

from flask import Flask
from my_module import my_function

data = 0 # global variable initialize to 0

app = Flask(__name__)

@app.route('/do/some/work', methods=[GET])
def work():
    my_function(data)

@app.route('/modify/global/var', methods=[GET])
def modify():
    global data
    data = 5

if __name__ == '__main__':
    app.run()

这是当前的问题......

第一次加载应用程序时,data = 0

的值

我点击了/do/some/work个端点5次,我在my_function使用data = 0的位置得到了一致的结果。

然后我点击/modify/global/var个端点一次,它将全局变量数据修改为data = 5

我再次点击/do/some/work端点5次。现在它给出了不一致的结果。有时它使用data = 5,有时它会在第一次初始化时使用data = 0

唯一有效的解决方案是重新启动应用程序并将data初始化为正确的值...但是,当然,当应用程序在生产中投入使用时,这不是一个选项......

这是我到目前为止所尝试过的......

  1. 将全局变量放在一个单独的模块separate_module.py中。以下示例......
  2. separate_module.py

    class GlobalData(object):
        def __init__(self): 
            self.data = 0
        def modify(self):
            self.data = 5
    

    ...然后import ing GlobalData,实例化其对象并使用它来修改全局变量data并将其传递给my_function()

    from separate_module import GlobalData
    
    ...
    
    gd = GlobalData()
    
    ...
    
    def work():
        my_function(gd.data)
    
    ...
    
    def modify():
        gd.modify()
    

    仍然产生相同的不一致结果......

    1. GlobalData global范围内删除并重新app.py对象,然后再进行修改。
    2. def modify():

          del gd
          global gd
          gd = GlobalData()
          gd.modify()
      

      ...我假设对对象进行硬删除会从内存中删除旧数据的所有引用,但仍会产生相同的结果...

      问题...

      我做错了什么?我该如何解决?

0 个答案:

没有答案