这可能是一个'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
但我的理解是,全球变量是全球变量!因此,来自不同用户的不同请求可以(可能)访问和更新相同的值,因此需要会话,以便存储每个用户的非全局变量。那么,在上面的代码中,是什么阻止了一个请求相信当前用户是另一个请求设置的用户?对不起,如果这是基本的,那就不是我认为事情有效了。
由于
答案 0 :(得分:2)
App Engine Python运行时是单线程的 - 每个运行时实例一次只处理一个请求。因此,您可以将globals用于特定于请求的参数,只要您在每个请求开始时注意重置它们,这样它们就不会将数据从一个请求泄漏到另一个请求。
答案 1 :(得分:0)
你并不是唯一一个对发动机上的全局变得困惑的人。但我知道os.environ对每个请求都是唯一的,所以我认为这可以解释这个代码是否正常工作。如果没有,可能是因为这个模块以某种方式获得了forced reloaded,这也是我在项目中动态设置的一个技巧。