Oop 应用程序引擎中的对象实例

Oop 应用程序引擎中的对象实例,oop,google-app-engine,Oop,Google App Engine,我正在使用AppEngine和Webapp2开发一个网站 我了解OO的概念以及它们在Python中的应用。然而,我对AppEngine如何使用OO感到困惑。创建我的应用程序实例时,是否为每个用户创建并重新使用每个类的一个实例?还是为每个用户创建单独的实例?这将决定我应该使用实例变量还是类变量 更具体地说,我应该在什么时候使用self。变量(实例变量)以及什么时候应该省略self。(类变量) 谢谢你的帮助。:) 我将分离面向对象(OO)和请求处理的概念。首先,appengine是基于请求驱动的模型

我正在使用AppEngine和Webapp2开发一个网站

我了解OO的概念以及它们在Python中的应用。然而,我对AppEngine如何使用OO感到困惑。创建我的应用程序实例时,是否为每个用户创建并重新使用每个类的一个实例?还是为每个用户创建单独的实例?这将决定我应该使用实例变量还是类变量

更具体地说,我应该在什么时候使用self。变量(实例变量)以及什么时候应该省略self。(类变量)


谢谢你的帮助。:)

我将分离面向对象(OO)和请求处理的概念。首先,appengine是基于请求驱动的模型。请求是应用程序引擎上触发的大多数操作的基础

其次,请注意App Engine实例[0]和webapp2.WSGIApplication[1]之间的区别,前者类似于应用程序的容器,由App Engine基础结构提供,后者是您定义的类的对象实例

为了简化,我假设您的应用程序只有1个webapp2.WSGIApplication。现在让我们从应用程序收到的第一个请求开始。在此之前,除了应用程序引擎机器上可用的代码和配置之外,您的应用程序不存在。一旦请求到达App Engine,就会创建一个新的App Engine实例[0]。一旦应用程序引擎实例就位并设置好,它将实例化一个webapp2.WSGIApplication实例[1]。现在您已经有了两个相关的“实例”,对象是容器的一部分。接下来,传入的请求被路由到您的webapp2.WSGIApplication实例,该实例将根据您完成的实现来处理请求

应用程序引擎系统将根据负载为您创建新的应用程序引擎实例。如果单个实例无法处理所有传入的请求,它将创建一个新实例(首先是[0],然后是[1]),并分散负载。如果这还不够,则创建第三个实例,以此类推。如果负载减小,情况也是如此。如果应用程序当前在3个实例上运行,但2个实例足以处理负载,则1个实例将被终止。此外,您不知道哪个特定实例将处理哪个请求

这就引出了你的第二个问题,你是否应该依赖于实例变量。因为AppEngine会在适当的时候创建和终止实例,而您不知道哪个实例会处理请求,所以您应该始终假定实例是无状态的。虽然情况并非总是如此,但可能每个请求都可以由一个全新的实例来处理

如果需要状态,请使用memcache(volatile)或datastore(persistent)或其他一些数据后端(blobstore、filesapi等)

[0]

[1]


PS:人们确实使用实例内存来优化请求,但是初学者开始学习App Engine应该考虑这是一种先进的技术。我才意识到我从来没有感谢过你的回答。所以,非常感谢!这是对我的问题的一个非常清楚、简洁的回答。