Flask全局变量

Pas*_*day 9 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
Run Code Online (Sandbox Code Playgroud)

存储名称并从另一个客户端检索它可以正常工作.然而,这感觉不对:一个简单的全局字典,其中任何会话几乎同时可以抛出复杂的对象,这真的有效,没有任何可怕的后果吗?

Mar*_*ers 17

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

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

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