Python Flask get请求未使用全局变量的更新版本

Python Flask get请求未使用全局变量的更新版本,python,flask,global,Python,Flask,Global,我对flask和python都是新手。我有一个保存天气数据的应用程序。我允许get和post命令进入我的flask应用程序。不幸的是,对我的API的自动调用并不总是返回正确的结果。我当前正在将数据存储在全局变量中。当调用post命令时,新数据将附加到现有数据中。不幸的是,有时调用get时,它没有收到我的全局数据变量的最新版本。我认为问题在于,在调用get之前,没有将更改从post函数传递到全局变量,因为我可以运行get并返回正确的结果 weatherData = [filed with data

我对flask和python都是新手。我有一个保存天气数据的应用程序。我允许get和post命令进入我的flask应用程序。不幸的是,对我的API的自动调用并不总是返回正确的结果。我当前正在将数据存储在全局变量中。当调用post命令时,新数据将附加到现有数据中。不幸的是,有时调用get时,它没有收到我的全局数据变量的最新版本。我认为问题在于,在调用get之前,没有将更改从post函数传递到全局变量,因为我可以运行get并返回正确的结果

weatherData = [filed with data read from csv on initialization]

class FullHistory(Resource):
    def get(self):
        ret = [];
        for row in weatherData:
            val = row['DATE']
            ret.append({"DATE":str(val)})
        return ret

    def post(self):
        global weatherData
        newWeatherData = weatherData
        args = parser.parse_args()
        newVal = int(args['DATE'])
        newWeatherData.append({'DATE':int(args['DATE']),'TMAX':float(args['TMAX']),'TMIN':float(args['TMIN'])})
        weatherData = newWeatherData
        #time.sleep(5)
        return {"DATE":str(newVal)},201

class SelectHistory(Resource):
    def get(self, date_id):
        val = int(date_id)
        bVal = False
        #time.sleep(5)
        global weatherData
        for row in weatherData:
            if(row['DATE'] == val):
                wd = row
                bVal = True
                break
        if bVal:
            return {"DATE":str(wd['DATE']),"TMAX":float(wd['TMAX']),"TMIN":float(wd['TMIN'])}
        else:
            return "HTTP Error code 404",404
    def delete(self, date_id):
        val = int(date_id)
        wdIter = None
        for row in weatherData:
            if(row['DATE'] == val):
                wdIter = row
                break
        if wdIter != None:
            weatherData.remove(wdIter)
            return {"DATE":str(val)},204
        else:
            return "HTTP Error code 404",404

是否有任何方法可以确保我的全局变量是最新的,或者让我的API等待返回,直到我确定更新已经传递?这应该是一个简单的应用程序。我真的希望现在还不必学习如何在python中使用线程。我已经确保我的呼叫get请求在帖子给出响应之前不会启动。我知道一种解决方法是使用睡眠来延迟我的响应,我宁愿首先理解为什么我的更新没有立即发生。

我相信你的问题是应用程序上下文。如上所述:

根据需要创建和销毁应用程序上下文。信息技术 决不在线程之间移动,也不会在线程之间共享 请求。因此,它是存储数据库连接的理想场所 信息和其他东西。调用内部堆栈对象 烧瓶。_app_ctx_堆栈。扩展可以免费存储额外的数据 最顶层的信息,假设他们选择了 唯一的名称,并应将其信息放在那里,而不是放在 flask.g对象,它是为用户代码保留的


尽管它说您可以在“最高级别”存储数据,但这并不可靠,而且如果您将项目外推到使用辅助进程,例如,您将需要持久性来在线程之间共享数据。每次修改数据时,您应该使用数据库、redis,或者至少更新.csv文件。

每次在Python中使用全局变量时,小猫都会死。在烧瓶里,它们甚至不起作用。可能是