你真的理解 if __name__ == '__main__' 的作用么?

在 python 的开发过程中经常需要用到if __name__ == '__main__' ?,那么你真的理解 if __name__ == '__main__' 的作用么?

在开发环境下:

我们定义一个test.py文件。代码如下:

def myTest():
    print("test", __name__)
    a = 1
    b = 2
    return a + b


if __name__ == '__main__':
    print("1", __name__)
    print("2", myTest())

运行test.py,控制台打印结果如下所示:

1 __main__
test __main__
2 3

当test.py作为执行文件的时候,__name__就是__main__。

那么当test.py作为一个模块,被另一个文件导入时,控制台会打印什么结果呢?

创建test2.py文件,代码如下:

from test import myTest

def myTest2():
    myTest()
    print("test2", __name__)

if __name__ == '__main__':
    myTest2()

运行test2.py,控制台打印结果如下所示:

test test
test2 __main__

看到这里,我想你已经明白了 if __name__ == '__main__' 的作用了。

也就是说,当某个 python文件作为执行文件是,会执行 if __name__ == '__main__' 下面的相关代码;当 python 文件作为一个模块被另一个 python 文件调用时,那么 if __name__ == '__main__' 下面的相关代码不会执行。

那么在生产环境中呢?

首先我们先来看看app.py文件中的代码:

from flask import Flask
app = Flask(__name__)
# 调用配置文件的相关API
app.config.from_object('config')

@app.route('/hello')
def index():
    return 'hello i use python'


if __name__ == '__main__':
    app.run(debug=app.debug)

如果我们需要将项目布署到生产环境,app.py是作为一个模块被导入的。

如果我们没有添加if __name__ == '__main__':这句代码,那么将会出现两次启动,为什么呢?

我们知道在生产环境中是使用nginx+uwsgi布署代码的,如果不写if __name__ == '__main__':将会执行app.run(debug=app.debug),那么uwsgi也会启动该模块,导致出现双重启动。

所以在什么时候添加if __name__ == '__main__':是一件值得认真思考的事情。

你可能感兴趣的:(python,知识点)