python - 为什么我的 python 脚本在 if __name__==__main__ 运行时继续运行?

标签 python if-statement multiprocessing

下面是我面临的问题的简化版本。当我运行我的代码时,例如下面的示例,为什么脚本在 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_1 时,multiprocessing 会启动一个单独的 Python 进程,该进程做的第一件事就是导入您的文件作为模块。当它这样做时,模块的 __name__ 不是 '__main__',所以 if __name__ == '__main__' 守卫内部的任何东西都不会' t 运行,但 print("Finished") 在守卫之外。

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

关于python - 为什么我的 python 脚本在 if __name__==__main__ 运行时继续运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59149722/

相关文章:

python - 在 Mac OS X 上链接到 Python 解释器的 C 库出现问题

python - 如何使用 python 和 matplotlib 将页码添加到 PDF 文件?

java - Java 中 if/else 循环中的变量问题

python - 如何结合 multiprocessing 和 eventlet

python - 使用 python multiprocessing 运行带有不同参数组合的循环脚本

python - 使用固定装置运行 python 测试用例时遇到问题

python - 检测异常是否已经在 Python 2.7 的嵌套 with 语句中处理

linux - 如何在shell脚本中查看和使用cp命令的状态?

if-statement - cobol 中的嵌套 if 语句

python - 函数初始化和对象初始化(多处理)