经验丰富的Java程序员试图学习Python。我在Google App Engine上有一个应用程序,并希望将我的管理员处理程序移动到单独的文件中。所以现在我有main.py和admin.py。我已经设置app.yaml来正确路由流量,并在每个文件中添加了对WSGIApplication()的调用以路由到相应的Handler。
我的问题是每个脚本文件是否需要def main()和相应的if语句:
application = webapp.WSGIApplication([(r'/admin/(.*)', Admin)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == '__main__':
main()
答案 0 :(得分:4)
您需要在任何直接引用app.yaml
。
每当App Engine需要向您的某个脚本发送请求时,它都会执行以下步骤:
main
的函数?如果没有,请再次导入并停止。main
功能。这样做的原因是因为导入模块相对昂贵,并且没有必要为每个请求重新导入它们。因此,它提供了一个优化:如果你提供一个名为main
的函数,在第一个函数之后的请求上,它将简单地执行这个函数而不是重新导入脚本。 if __name__ == "__main__":
节用于检测脚本的第一次导入,并为第一个请求手动执行main
。
简而言之,答案是您可以同时保留main
和if
条款,或将它们包括在内。如果你把它们排除在外,你的应用程序的效率会稍微降低,但是如果你包含其中一个而不是另一个,那么你只会遇到麻烦。
答案 1 :(得分:3)
没有必要:你可以拥有:
if __name__ == '__main__':
run_wsgi_app(application)
我似乎记得读过谷歌推荐main()
函数,因为它们以字节编译的形式缓存它,而不是每次请求进入时重新编译文件。虽然它可能没有太大的区别管理员。