gpt4 book ai didi

python - 为什么 webapp.WSGIApplication 的实例总是在谷歌应用引擎代码中定义为全局变量?

转载 作者:太空狗 更新时间:2023-10-29 22:27:51 27 4
gpt4 key购买 nike

我开始学习使用谷歌应用引擎,在我遇到的大部分代码中,它们将 webapp.WSGIApplication 的实例声明为全局变量。这似乎不是必需的,因为代码在 main 函数中本地声明时可以正常工作。我总是被告知应该避免使用全局变量。那么这样做有什么好的,甚至不太好的理由吗?

例子:

class Guestbook(webapp.RequestHandler):
def post(self):
greeting = Greeting()

if users.get_current_user():
greeting.author = users.get_current_user()

greeting.content = self.request.get('content')
greeting.put()
self.redirect('/')

application = webapp.WSGIApplication([ ('/', MainPage), ('/sign', Guestbook)], debug=True)

def main():
wsgiref.handlers.CGIHandler().run(application)

为什么不执行以下操作,这也有效:

class Guestbook(webapp.RequestHandler):
def post(self):
greeting = Greeting()

if users.get_current_user():
greeting.author = users.get_current_user()

greeting.content = self.request.get('content')
greeting.put()
self.redirect('/')

def main():
application = webapp.WSGIApplication([ ('/', MainPage), ('/sign', Guestbook)], debug=True)
wsgiref.handlers.CGIHandler().run(application)

这也适用于具有多个请求处理程序的示例。

最佳答案

Google App Engine 提供了一个名为 App caching 的巧妙功能.
第一次调用主处理程序时,会评估完整脚本,导入模块并创建全局元素。
如果在脚本已经被评估之后调用处理程序,应用程序实例只需直接调用其 main() 函数。
创建全局元素的开销是第一次支付,创建的对象可以被多个请求重用,节省时间和资源

也就是说,强烈建议选择第一个选项,在 main() 函数之外声明 application 变量。

关于python - 为什么 webapp.WSGIApplication 的实例总是在谷歌应用引擎代码中定义为全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5172694/

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