繁体   English   中英

如果 __name__==__main__ 运行,为什么我的 python 脚本会继续运行?

[英]Why does my python script continue while if __name__==__main__ runs?

以下是我面临的问题的简化版本。 当我运行我的代码时,下面的示例,为什么脚本在 if _name__==__main_ 部分下面运行代码,而位于 if 语句下面的函数仍在运行? 我认为 p_1.join() 命令应该阻止脚本继续,直到单独的进程完成。 在下面的输出中,我希望只有在所有脚本都结束时才打印“完成”这个词 - 但它是第二次打印,然后是最后一次打印。

过去我曾使用 poolexecutor 解决类似的问题; 但在这个项目中,我需要单独启动每个流程,以便我可以为每个流程分配单独的独立功能。

import time
from multiprocessing import Process, Queue

def a(x,q):
    time.sleep(3)
    q.put(x*x)

q=Queue()
def main():
    print("Main Function Starts")
    p_1 = Process(target=a, args=(5,q))
    p_1.start()
    p_1.join()
    b= q.get()
    print(b)
    print("Main Function Ends")

if __name__ == '__main__':        
       main()

print("Finished")

**Output:**
Main Function Starts
Finished
25
Main Function Ends
Finished

您应该将该代码放在if __name__ == '__main__'守卫中。 防止这种事情是if __name__ == '__main__'

你在 Windows 上。 当您启动p_1multiprocessing启动一个单独的 Python 进程,该进程所做的第一件事就是您的文件作为模块导入 当它这样做时,模块的__name__不是'__main__' ,所以if __name__ == '__main__'守卫内的任何东西都不会运行,但print("Finished")在守卫之外。

main()仍在运行时,您的程序不会以某种方式继续通过main() 工作进程正在执行不需要的打印。

你如何运行你的脚本? 当我在命令行上运行你的脚本时,'Finished' 被打印一次,如下所示。

$ python test.py

Main Function Starts
25
Main Function Ends
Finished

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM