考虑我在 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 ...
假设以上是正确的(如果不是,请纠正我)......
- 我如何处理我想要一个仅在请求的生命周期内持续存在的全局变量的情况?我可以在 RequestHandler 类中放置一个实例变量,但是我导入的实用程序模块之类的东西使用全局变量来存储消息对象之类的东西呢?
- 是否有某种技术可以重置所有变量,或强制重新实例化环境?
- 全球环境会无限期地持续下去,还是会在某个时候自我重置?
- 这个 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
这些也会随着请求而增加