大家都知道,在绝大多数Python的项目的入口文件中都会加上一句:
if __name__ == '__main__':的判断,似乎已经成了一个约定俗成的惯例;如 flask 的入口文件中:if __name__ == '__main__': app.run()
作用
- 在入口文件加上
if __name__ == '__main__':,可以保证app.run()只在当前模块直接运行时才能被执行,当模块被导入时不能执行app.run().
我相信这个大家应该都是知道的,但是具体到 flask 项目里面,在入口文件里面增加这样的
if判断,然后再启动web服务器到底有什么具体的意义吗?
意义
- 在 flask 项目的开发环境下启动的web服务器是 flask 自带的一个非常简单服务器,但是如果要把项目部署到生产环境中的时候通常是不会使用 flask 自带的服务器的.
- 在生产环境下部署项目的时候,需要使用
nginx + uwxgi的组合部署项目,nginx作为前置服务器用来接收浏览器发来的请求,接着把请求转发给uwxgi. - 在生产环境下启动 flask 服务器并不是像在开发环境下手动输入命令执行启动,而是由
uwxgi加载 flask 入口模块来启动 flask 相关的代码,在生产环境下入口文件只是被uwxgi加载导入的模块文件,所以在生产环境中上面的app.run()是根本不会执行的. - 但是如果没有加
if __name__ == '__main__'这个判断的话,在生产环境中同样会执行app.run()启动 flask 自带的服务器,这个时候就有两个服务器了(uwxgi服务器和app.run()启动的 flask 自带的服务器)