使用谷歌应用引擎:
# more code ahead not shown
application = webapp.WSGIApplication([('/', Home)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
如果两个不同的用户在两台不同的机器上请求网页,则会调用两个单独的服务器实例?
或者只有一个服务器实例一直在运行以处理所有请求?
如果一个用户在同一个浏览器中打开网页两次怎么样?
修改 :
根据以下答案,一个实例可以轮流处理来自不同用户的请求。然后考虑以下部分代码,取自Google给出的示例:
class User(db.Model):
email = db.EmailProperty()
nickname = db.StringProperty()
1,电子邮件和昵称这里被定义为类变量? 2,同一服务器实例处理的所有请求共享相同的变量,因而错误地相互干扰? (比如,一个人的电子邮件出现在另一个人的页面中)
PS。我知道我应该阅读手册和文档更多,我正在做,但是经验丰富的程序员的答案将真正帮助我更快地理解,谢谢
答案 0 :(得分:4)
实例可以在其生命周期内处理许多请求。在python运行时的线程模型中,每个实例只能在任何给定时间处理单个请求。如果两个请求同时到达,则它们可能由一个实例一个接一个地处理,或者可能产生第二个实例来处理该请求。
编辑:
通常,每个请求使用的变量将限定为RequestHandler实例的.get()
或.post()
方法,因此不会“泄漏”到其他请求中。您应该注意在脚本中使用全局变量,因为这些变量将缓存在实例中并在请求之间共享。如果不知道你想要的确切原因,请不要使用全局变量(这对任何应用程序来说都是好建议),你会没事的。
答案 1 :(得分:1)
App Engine根据请求量动态建立并删除实例。
来自the docs:
App Engine应用程序由 任何给定的任意数量的实例 时间,取决于音量 您的申请收到的请求。 作为您的申请的要求 增加,所以数量 为它提供动力。
每个实例都有自己的队列 来电请求。 App Engine监视器 每个请求中等待的请求数 实例的队列。如果是App Engine 检测应用程序的队列 由于增加而变得太长 加载,它会自动创建一个新的 要处理的应用程序的实例 加载。
App Engine反向缩放实例 当请求量减少时。在这 方式,App Engine确保全部 您的应用程序的当前实例 被用来达到最佳效率。 这种自动缩放使运行 App Engine非常划算。
不使用应用程序时 所有,App Engine都会关闭它 相关的实例,但很容易 一旦它们重新加载它们 需要的。