尝试学习 Python 的经验丰富的 Java 程序员。我在 Google App Engine 上有一个应用程序,想将我的管理处理程序移动到一个单独的文件中。所以现在我有了 main.py 和 admin.py。我已设置 app.yaml 以正确路由流量,并在每个文件中添加了对 WSGIApplication() 的调用以路由到适当的处理程序。
我的问题是是否每个脚本文件都需要 def main() 和相应的 if 语句:
application = webapp.WSGIApplication([(r'/admin/(.*)', Admin)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == '__main__':
main()
最佳答案
您在直接引用您的 app.yaml
的任何脚本中都需要它。
每当 App Engine 需要向您的脚本之一发送请求时,它都会执行以下步骤:
- 之前是否导入过脚本?如果没有,只需导入并停止。
- 如果之前导入过脚本,它是否有一个名为
main
的函数?如果不是,请重新导入并停止。 - 执行脚本的
main
函数。
这样做的原因是导入模块相对昂贵,并且没有必要为每个请求重新导入它们。因此,它提供了一个优化:如果您提供一个名为 main
的函数,在第一个请求之后,它会简单地执行此函数,而不是重新导入脚本。 if __name__ == "__main__":
节用于检测脚本的第一次导入,并为第一个请求手动执行 main
。
简而言之,答案是您可以同时保留 main
和 if
子句,或者同时包含它们。如果您将它们排除在外,您的应用程序的效率会稍微降低,但如果您包含两者之一而不包含另一个,您只会遇到麻烦。
关于python - main() 是否需要在每个包含处理程序的脚本中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4910363/