gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:21:29 27 4
gpt4 key购买 nike

下面是我面临的问题的简化版本。当我运行我的代码时,例如下面的示例,为什么脚本在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com