我试图找出如何在烧瓶中使用全局变量:
gl = {'name': 'Default'}
@app.route('/store/<name>')
def store_var(name=None):
gl['name'] = name
return "Storing " + gl['name']
@app.route("/retrieve")
def retrieve_var():
n = gl['name']
return "Retrieved: " + n
存储名称并从另一个客户端检索它工作正常。然而,这感觉不对:一个简单的全局字典,任何会话几乎同时都可以输入复杂的对象,这真的能在没有任何可怕后果的情况下工作吗?
不,在simple Flask开发服务器之外,它不起作用。
WSGI服务器有两种扩展方式:使用线程或分叉进程。全局字典不是线程安全存储,当使用多处理时,对全局的更改不会共享。如果你在像谷歌应用服务器这样的PAAS提供商上运行,进程甚至没有分叉;他们甚至在完全独立的机器上运行。
使用某种后端存储来代替;一个memcache服务器,一个数据库服务器,一些控制并发访问和跨进程共享数据的东西。