Flask全局变量

时间:2014-05-04 14:55:48

标签: python flask

我正在尝试了解如何在Flask中使用全局变量:

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 个答案:

答案 0 :(得分:15)

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

WSGI服务器以两种方式扩展;通过使用线程或通过分叉过程。全局字典不是线程安全的存储,并且当使用多处理更改全局变量时,不会共享。如果您在Google App Server等PAAS提供商上运行此功能,则流程甚至不会分叉;它们甚至可以在单独的机器上运行

使用某种后端存储; memcached服务器,数据库服务器,某种来控制并发访问并跨进程共享数据。