首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅在请求的生存期内保持的全局变量- Python、Webapp2

仅在请求的生存期内保持的全局变量- Python、Webapp2
EN

Stack Overflow用户
提问于 2016-03-25 09:15:20
回答 1查看 665关注 0票数 0

我在Google App Engine的WebApp2应用程序中有Python脚本:

代码语言:javascript
复制
x = 0

class MyHandler(webapp2.RequestHandler):

      def get(self):

          global x
          x = x + 1
          print x

每次刷新页面(或连接新用户)时,计数都会递增。Python不会针对每个请求启动一个新进程(但我预料到了)。当我想要一个全局变量只在请求的生命周期内存在时,我该如何处理呢?我可以使用实例变量吗?具体如何使用?

EN

回答 1

Stack Overflow用户

发布于 2016-03-25 09:28:26

你所看到的行为是意料之中的。并不是每个请求都会启动新实例。

使用request对象、env对象或线程局部变量来存储您希望在请求的生命周期内在代码中的任何位置都可以访问的信息。(在每个请求中都会重新创建环境,因此它是安全的)。

有关使用线程本地存储的讨论,请参阅Is threading.local() a safe way to store variables for a single request in Google AppEngine?

下面是一个存储本地请求对象的示例,用于存储请求生命周期的特定信息。所有这些代码必须在您的处理程序中。所有部件都记录在webapp2文档中。顺便说一句,我没有使用webapp2,所以这没有经过测试。(我使用金字塔/bobo和这个模型来执行请求级缓存)。

类MyHandler(webapp2.RequestHandler):

代码语言:javascript
复制
  def get(self):
      req = webapp2.get_request()   
      # you have request in self, however this is to show how you get a 
      # request object anywhere in your code.


      key = "Some Key"

      if req:
            # getting some store value from the environ of request (See WebOb docs)
            someval = req.environ.get(key,None)
            if someval :
                # do something

      # and setting
      if req:
            req.environ[key] = 'some value'

这样做有一个限制,即environ‘’key‘值必须是一个字符串。

阅读Webob文档,了解如何在request对象中存储任意值。http://docs.webob.org/en/stable/reference.html#ad-hoc-attributes -

代码语言:javascript
复制
req.environ['webob.adhoc_attrs']
{'some_attr': 'blah blah blah'}

此外,如果您读取了webapp2请求对象文档,则可以使用一个注册表http://webapp-improved.appspot.com/api/webapp2.html#webapp2.Request来存储信息

请注意,您在请求处理程序外部定义的任何变量本质上都是缓存的,在实例生命周期内可用。这就是你错的地方。

要了解应用程序级缓存的工作原理和原因,以及第一次尝试没有达到预期效果的原因,可以查看https://cloud.google.com/appengine/docs/python/requests#Python_App_caching

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36212614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档