【发布时间】:2015-12-25 06:00:08
【问题描述】:
在我的应用程序中,一个普通对象的状态是通过发出请求来改变的,响应取决于状态。
class SomeObj():
def __init__(self, param):
self.param = param
def query(self):
self.param += 1
return self.param
global_obj = SomeObj(0)
@app.route('/')
def home():
flash(global_obj.query())
render_template('index.html')
如果我在我的开发服务器上运行它,我希望得到 1、2、3 等等。如果同时从 100 个不同的客户端发出请求,会出现问题吗?预期的结果是 100 个不同的客户端每个都看到一个从 1 到 100 的唯一数字。或者会发生这样的事情:
- 客户端 1 查询。
self.param加 1。 - 在执行 return 语句之前,线程切换到客户端 2。
self.param再次递增。 - 线程切换回客户端 1,客户端返回数字 2,例如。
- 现在线程移动到客户端 2 并向他/她返回数字 3。
由于只有两个客户端,因此预期结果是 1 和 2,而不是 2 和 3。跳过了一个数字。
当我扩展我的应用程序时,这真的会发生吗?我应该看看全局变量的哪些替代方案?
【问题讨论】:
标签: python flask thread-safety