python - main() 是否需要在每个包含处理程序的脚本中?

标签 python google-app-engine httphandler

尝试学习 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 需要向您的脚本之一发送请求时,它都会执行以下步骤:

  1. 之前是否导入过脚本?如果没有,只需导入并停止。
  2. 如果之前导入过脚本,它是否有一个名为main 的函数?如果不是,请重新导入并停止。
  3. 执行脚本的main函数。

这样做的原因是导入模块相对昂贵,并且没有必要为每个请求重新导入它们。因此,它提供了一个优化:如果您提供一个名为 main 的函数,在第一个请求之后,它会简单地执行此函数,而不是重新导入脚本。 if __name__ == "__main__": 节用于检测脚本的第一次导入,并为第一个请求手动执行 main

简而言之,答案是您可以同时保留 mainif 子句,或者同时包含它们。如果您将它们排除在外,您的应用程序的效率会稍微降低,但如果您包含两者之一而不包含另一个,您只会遇到麻烦。

关于python - main() 是否需要在每个包含处理程序的脚本中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4910363/

相关文章:

python - Django-Q 使用自定义函数安排非类型错误

python - Spacy NER实体位置

这个 : max_value = max(firstArray) that is not in secondArray 的 python 表达式

google-app-engine - 如何按键选择单个实体(低级 Java 数据存储 API)

python - gae mapreduce 生成器错误 无属性 validate_bucket_name

java - 使用 Java App Engine 的多个站点

c# - HttpContext.RemapHandler 是否应该更改哪个处理程序处理请求?

c# - 在没有 base64 编码的情况下通过 https 发送字节数组的方法?

python - 在 python 中测试副作用

iis - 何时编写处理程序或模块.. 任何示例?