我试图找出如何在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服务器,数据库服务器,控制并发访问和跨进程共享数据的东西.
| 归档时间: |
|
| 查看次数: |
7096 次 |
| 最近记录: |