GAE Python变量是否持久存在?

时间:2014-07-28 21:40:57

标签: python google-app-engine

我对GAE的Python工作原理感到有些困惑。

如果我有一个变量x,它不在memcache中而不在db中,它是否在下次运行脚本时保留它的值(即,对于下一个用户)?< / p>

class somePage(webapp2.RequestHandler):
    x = 1
    def get(self):
        if x == 2:
            foo()
        else:
            bar()
            x = 2

foo()会被调用吗?

如果在x之外宣布somePage会怎样?

x = 1
class anotherPage(webapp2.RequestHandler):
    def get(self):    
        if x == 2:
            foo()
        else:
            bar()
            x = 2

脚本&#34;新鲜&#34;每次它被击中,或者就像这样做:

$ python
>>>

然后让每个用户在同一个键盘上排队(不打算)吗?

1 个答案:

答案 0 :(得分:1)

tldr; GAE的工作方式,全局可变变量不是共享上下文的可行选择。

与大多数完全管理的PaaS解决方案一样,GAE的主要目标之一是自动可扩展性。您可以同时运行多个程序实例;调度员可以随时杀死和/或启动实例,每个实例都在完全隔离的环境中运行。

由于实例之间的隔离程度较高,通过全局可变变量共享上下文不是一个可行的选择 - 它有时似乎有效,但你不能依赖它。

为了分享背景,有几个选择:

  • GAE托管服务之一,例如:任务队列,Memcache或用户API
  • 其中一个存储选项:使用Cloud SQL的传统MySQL数据库,无模式NoSQL数据存储或使用云存储的对象存储
  • 连接到其市场上提供的第三方服务

您也可以使用他们的IaaS服务运行自己的服务(但这会破坏使用PaaS的一些主要原因)。