寻求启蒙 - AppEngine中的全局变量(aeoid.get_current_user())

时间:2010-03-20 06:49:32

标签: python google-app-engine session global-variables

这可能是一个'Python Web Programming 101'问题,但我对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 :(得分:2)

App Engine Python运行时是单线程的 - 每个运行时实例一次只处理一个请求。因此,您可以将globals用于特定于请求的参数,只要您在每个请求开始时注意重置它们,这样它们就不会将数据从一个请求泄漏到另一个请求。

答案 1 :(得分:0)

你并不是唯一一个对发动机上的全局变得困惑的人。但我知道os.environ对每个请求都是唯一的,所以我认为这可以解释这个代码是否正常工作。如果没有,可能是因为这个模块以某种方式获得了forced reloaded,这也是我在项目中动态设置的一个技巧。