你真的理解 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__':是一件值得认真思考的事情。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值