gpt4 book ai didi

python - 了解 Python WSGI 应用程序中的全局对象持久性

转载 作者:太空狗 更新时间:2023-10-29 17:41:36 26 4
gpt4 key购买 nike

考虑我在 Google App Engine 中的 WebApp2 应用程序中的以下代码:

count = 0

class MyHandler(webapp2.RequestHandler):

def get(self):

global count
count = count + 1
print count

随着页面的每次刷新,计数会增加。

我来自 PHP 世界,在那里每个请求都是一个新的全局环境。据我了解这里发生的是,因为我正在使用 WebApp2 的 wsgi 配置,Python 不会在每个请求上启动新进程。另一方面,如果我使用的是 cgi 配置,则每次都会重新实例化全局环境,例如 PHP...

假设以上是正确的(如果不正确,请指正)...

  1. 如果我想要一个仅在请求的生命周期内持续存在的全局变量,我该如何处理这种情况?我可以在 RequestHandler 类中放置一个实例变量,但是我导入的使用全局变量来存储消息对象的实用程序模块呢?
  2. 是否有某种技术可以重置所有变量,或强制重新实例化环境?
  3. 全局环境会无限期地持续下去,还是会在某个时刻自行重置?
  4. 这个 GAE 是否特定,或者 wsgi 全局持久性在任何服务器场景中是否都一样?

编辑:

这是使用 threadlocal 的尝试:

count = 0

mydata = threading.local()
mydata.count = 0

class MyHandler(webapp2.RequestHandler):

def get(self):

global count
count = count + 1
print count

mydata.count = mydata.count + 1
print mydata.count

这些也会随着请求增加

最佳答案

你的理解是正确的。如果您希望变量在请求期间持续存在,则根本不应将它们设为全局变量 - 将它们设为您的 RequestHandler 类的实例变量,以 self.var 访问。由于为每个请求都实例化了一个新的 RequestHandler,因此只要您需要,您的变量就会一直存在。除非您确实需要全局(而不是特定于请求的)范围,否则最好避免使用全局变量。

另请注意,您的 App Engine 应用程序将在多个服务器上运行;全局变量只能由同一服务器内的请求访问。

关于python - 了解 Python WSGI 应用程序中的全局对象持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8170973/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com