我需要一个简单的测试和设置指令在我的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}
作为响应。这感觉就像我没有要求的非常奇怪的缓存。