寻求启发 - AppEngine中的全局变量(aeoid.get_current_user())
这可能是个“Python网页编程入门”的问题,但我对aeoid项目中的一些代码感到困惑(http://github.com/Arachnid/aeoid)。以下是代码:
_current_user = None
def get_current_user():
"""Returns the currently logged in user, or None if no user is logged in."""
global _current_user
if not _current_user and 'aeoid.user' in os.environ:
_current_user = User(None, _from_model_key=os.environ['aeoid.user'])
return _current_user
但我一直以为全局变量就是,嗯,全球通用的!所以来自不同用户的不同请求可能会(有可能)访问和更新同一个值,因此需要会话来存储每个用户的非全局变量。那么,在上面的代码中,是什么阻止一个请求认为当前用户是另一个请求设置的用户呢?抱歉如果这个问题太基础了,我只是觉得事情并不是这样运作的。
谢谢
2 个回答
0
你并不是唯一一个对App Engine上的全局变量感到困惑的人。不过我知道,os.environ是针对每个请求都是独一无二的,所以我觉得这可以解释为什么这段代码能正常工作。如果不是这样,可能是这个模块以某种方式被强制重新加载了,这也是我在研究的一个技巧,用于在我的项目中实现动态设置。
2
App Engine的Python运行环境是单线程的,也就是说每次只能处理一个请求。在每个运行实例中,只有一个请求会被同时处理。因此,你可以使用全局变量来存储与请求相关的参数,只要你在每次请求开始时重置这些全局变量,确保它们不会把一个请求的数据泄露到另一个请求中。