提问者:小点点

烧瓶全局变量[重复]


我试图找出如何在烧瓶中使用全局变量:

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

存储名称并从另一个客户端检索它工作正常。然而,这感觉不对:一个简单的全局字典,任何会话几乎同时都可以输入复杂的对象,这真的能在没有任何可怕后果的情况下工作吗?


共1个答案

匿名用户

不,在simple Flask开发服务器之外,它不起作用。

WSGI服务器有两种扩展方式:使用线程或分叉进程。全局字典不是线程安全存储,当使用多处理时,对全局的更改不会共享。如果你在像谷歌应用服务器这样的PAAS提供商上运行,进程甚至没有分叉;他们甚至在完全独立的机器上运行。

使用某种后端存储来代替;一个memcache服务器,一个数据库服务器,一些控制并发访问和跨进程共享数据的东西。