为何Python代码持续循环输出11111并陷入死循环?
程序持续输出11111并陷入循环的原因分析
核心问题:进程嵌套循环+无保护的模块顶层代码
执行流程触发无限循环
- 运行
python aaa.py时,aaa.py顶层代码先打印11111,定义exp=0,接着通过subprocess.run启动新进程运行bbb.py。 - 新进程里的bbb.py执行
import aaa,Python导入模块时会执行模块内所有顶层代码,于是这个新进程中的aaa.py又会打印11111,再次启动bbb.py进程。 - 该过程无限重复,形成嵌套的进程循环,导致程序持续输出
11111并卡住。
- 运行
根本原因:缺少主程序入口保护
Python中模块被导入时会执行所有顶层代码,而你的aaa.py没有用if __name__ == '__main__':包裹启动子进程的逻辑,导致模块被导入时也会触发子进程启动,进而引发循环。
解决方法
在aaa.py中把主程序逻辑放到if __name__ == '__main__':块内,只有当aaa.py作为主程序运行时才执行子进程启动逻辑,被导入时不会执行:
import subprocess exp = 0 if __name__ == '__main__': print(11111) subprocess.run(['python', 'bbb.py']) print(22222) print(exp)
修改后,bbb.py导入aaa时只会执行模块初始化代码(定义exp=0),不会启动新的子进程,循环被打破,程序能正常执行。
内容的提问来源于stack exchange,提问作者yjy
相关产品推荐
相关产品推荐

