这涉及在中使用一条“网关”路线app.yaml,然后在RequestHandler中选择WSGIApplication。
app.yaml
RequestHandler
WSGIApplication
- url: /.* script: main.py
from google.appengine.ext import webapp class Page1(webapp.RequestHandler): def get(self): self.response.out.write("Page 1") class Page2(webapp.RequestHandler): def get(self): self.response.out.write("Page 2") application = webapp.WSGIApplication([ ('/page1/', Page1), ('/page2/', Page2), ], debug=True) def main(): wsgiref.handlers.CGIHandler().run(application) if __name__ == '__main__': main()
这涉及在中定义两个路由app.yaml,然后为每个定义两个脚本(page1.py和page2.py)。
page1.py
page2.py
- url: /page1/ script: page1.py - url: /page2/ script: page2.py
from google.appengine.ext import webapp class Page1(webapp.RequestHandler): def get(self): self.response.out.write("Page 1") application = webapp.WSGIApplication([ ('/page1/', Page1), ], debug=True) def main(): wsgiref.handlers.CGIHandler().run(application) if __name__ == '__main__': main()
from google.appengine.ext import webapp class Page2(webapp.RequestHandler): def get(self): self.response.out.write("Page 2") application = webapp.WSGIApplication([ ('/page2/', Page2), ], debug=True) def main(): wsgiref.handlers.CGIHandler().run(application) if __name__ == '__main__': main()
每种模式的优点和缺点是什么?一个比另一个快吗?
唯一的性能影响与模块的加载有关:模块在首次使用时就加载到实例上,并且拆分成块需要较少的模块加载量才能在新实例上提供页面。
但是,这非常少,因为您可以轻松地使处理程序脚本按需动态加载所需的模块-而这正是许多常见框架所做的。
通常,app.yaml路由设计用于在不同的组件或应用程序之间进行路由。例如,remote_api和deferred都有自己的处理程序。因此,为您的应用程序定义一个可以处理其他所有内容的处理程序是完全合理的。