2011-05-05 47 views
5

使用谷歌应用程序引擎:Google App Engine是否每个请求都运行一个应用程序的实例?或所有请求?

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

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 

如果两个不同的用户要求两个不同的机器上的网页,服务器的两个单独的实例将被调用?

或者只有一个服务器实例正在运行,处理所有请求的所有时间?

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

编辑

根据下面的答案,一个实例可以处理来自不同用户的请求启动轮流。然后考虑下面的代码部分,从谷歌给的例子采取:

class User(db.Model): 
    email = db.EmailProperty() 
    nickname = db.StringProperty() 

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

ps。我知道我应该阅读手册和文档更和我这样做,但是从经验的程序员答案将真正帮助我了解通过更快,更感谢

+1

RE:邮件/昵称为类变量。他们是'财产',你不会在你和班级的实例一起工作的班上工作。即你不用'User.email =“[email protected]”'你做'u = User(); u.email =“[email protected]”' – 2011-05-05 15:47:46

回答

4

一个实例可以处理在其生命周期的许多要求。在python运行时的线程模型中,每个实例在任何给定的时间只能处理一个请求。如果2个请求在同一时间到达,他们可能会在其他的后一个实例来处理一个或第二个实例可能会产生处理请求。


编辑:

通常,由每个请求所使用的变量将范围限定于RequestHandler实例的.get().post()方法,并且因此不能“泄漏”到其他请求。在脚本中使用全局变量时应该小心,因为这些变量将缓存在实例中,并在请求之间共享。你为什么要(这是所有应用程序很好的意见,对于这个问题),你会没事的,不要不知道到底使用全局变量。

1

的App Engine动态地构建起来,眼泪就下来了实例依据的申请量。

the docs

App Engine应用程序在任何给定 时间,这取决于你的应用程序接收 请求量由 任意数量的实例供电。 随着您的应用程序 的请求数量增加,为其供电的实例数量也增加。

每个实例都有自己的 传入请求的队列。 App Engine会监控 在每个 实例队列中等待的请求数。如果App Engine 检测到应用程序 的队列由于增加了 加载而变得太长,它会自动创建一个新的应用程序实例 以处理加载的 。当请求交易量下降

App引擎扩展反向 实例。在这种方式下,App Engine可以确保您的应用程序的当前实例 的所有 都被用于实现最佳效率。 这个自动缩放使得运行 App Engine非常划算。

当应用程序不被使用的所有 ,应用程序引擎关闭其相关 实例,但容易 尽快重新加载它们,因为它们需要 。

相关问题