我是燒瓶和python的新手。我正在準備一個應用程序來保存天氣數據。我允許get和post命令進入我的燒瓶應用程序。不幸的是,我的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中使用線程。我確定我的電話獲得請求不會在郵件發出響應之後纔開始。我知道一個解決方法是使用睡眠來延遲我的反應,我寧願明白爲什麼我的更新不是立即發生。
每當你在Python中使用一個全局變量時,一隻小貓就會死亡。在燒瓶他們甚至不工作。 –
[在燒瓶應用程序中保留全局狀態]的可能重複(http://stackoverflow.com/questions/19277280/preserving-global-state-in-a-flask-application) –