Google App Engine是否每个请求运行一个应用实例?还是针对所有要求?

zha*_*nwu 5 python google-app-engine

使用谷歌应用引擎:

# more code ahead not shown
application = webapp.WSGIApplication([('/', Home)],
                                 debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

如果两个不同的用户在两台不同的机器上请求网页,那么将调用服务器的两个单独实例?

或者只是服务器的一个实例一直在运行以处理所有请求?

如果一个用户在同一个浏览器中打开网页两次怎么样?

编辑:

根据下面的答案,一个实例可以轮流处理来自不同用户的请求.然后考虑以下几部分代码,取自Google给出的示例:

class User(db.Model):
    email = db.EmailProperty()
    nickname = db.StringProperty()
Run Code Online (Sandbox Code Playgroud)

1,这里的电子邮件昵称被定义为类变量?2,同一服务器实例处理的所有请求共享相同的变量,因而错误地相互干扰?(比如,一个人的电子邮件出现在另一个人的页面中)

PS.我知道我应该阅读手册和文档更多,我正在这样做,但是经验丰富的程序员的答案将真正帮助我更快地理解,更多通过,谢谢

Woo*_*ble 4

一个实例在其生命周期内可以处理许多请求。在Python运行时的线程模型中,每个实例在任何给定时间只能处理单个请求。如果两个请求同时到达,它们可能会由一个实例依次处理,或者可能会生成第二个实例来处理该请求。


编辑:

一般来说,每个请求使用的变量将被限定在 RequestHandler 实例.get().post()方法的范围内,因此不能“泄漏”到其他请求中。在脚本中使用全局变量时应小心,因为这些变量将缓存在实例中并在请求之间共享。在不确切知道为什么要使用全局变量的情况下不要使用全局变量(就这一点而言,这对于任何应用程序来说都是一个很好的建议),这样就可以了。