我需要一個簡單的測試和設置指令在我的Flask網絡服務器。爲TAS的代碼是非常簡單的(我不認爲這是問題的實際,但我把它在這裏的完整性):自制Python TaS本地工作,不在Azure服務器上
from threading import Lock
class TaS:
def __init__(self, default):
self.__lock = Lock()
self.__value = default
def update(self, new):
self.__lock.acquire()
old = self.__value
self.__value = new
self.__lock.release()
return old
我做了這個樣本瓶應用程序來檢查它是否工作:
from Asdf import app
from ...helpers import TaS
from time import sleep
from flask import jsonify
l = TaS(0)
@app.route("/test")
def test():
old = l.update(1)
sleep(3)
return jsonify({"Old TaS value" : old})
現在,當我運行這個地方,並在3秒內2個請求,我得到的答覆是:{"Old TaS value": 0}
和{"Old TaS value": 1}
,所以它看起來像我的助教工作得很好。但是,當我將它推送到Azure開發服務器併發出兩個併發請求時,我得到{"Old TaS value": 0}
和{"Old TaS value": 0}
...兩個併發請求完成後,我發出一個或多個新請求(併發或不同意,這並不重要)我做總是得到{"Old TaS value": 1}
迴應。
這是怎麼回事?它看起來像Azure實際上只執行多個相同的併發請求中的一個,然後將其結果返回給所有請求。即使在向併發請求的URL添加隨機唯一獲取參數時,它們也都以{"Old TaS value": 0}
作爲響應。這感覺就像我沒有要求的非常奇怪的緩存。