Discuss / Python / 关于 if __name__ == '__main__' 的疑问

关于 if __name__ == '__main__' 的疑问

Topic source

苏生不语_

#1 Created at ... [Delete] [Delete and Lock User]
from multiprocessing import Process
import os


# 子进程执行
def run_proc(name):
    print('Run child process %s (%s)' % (name, os.getpid()))


# if __name__ == '__main__':
print('Parent process %s' % os.getppid())
p = Process(target=run_proc, args=('test',))
p.start()
p.join()
print('Child process end')

这样执行代码会报错,但是我直接执行本程序,if 条件不是成立的吗,那加不加 if 有什么区别?

苏生不语_

#2 Created at ... [Delete] [Delete and Lock User]

找到答案了,因为子进程会在运行时拷贝当前主进程中的所有内容,这也就意味着当一个新的子进程被创建的时候,该子进程就会复制当前模块,所以如果没有 if name == 'main': 就会不断创建新的子进程,形成死循环,查看报错日志, Parent process 2752 Parent process 3916 在控制台看到了两句父进程ID输出,与预期的结果不符 所以加上if条件是为了避免死循环

Champhy_Who

#3 Created at ... [Delete] [Delete and Lock User]

我debug了你的代码 没有报错,所以不知道你什么情况。

另外,if name == 'main':的作用 是当本脚本被import时,if下面的语句不会执行


  • 1

Reply