python程序开子进程打包成exe文件运行炸内存原因剖析
首先给出伪代码
1 from multiprocessing import Process 2 3 def task(): 4 print("hahaha") 5 pass 6 7 if __name__ == '__main__': 8 p = Process(target=task) 9 p.start()
pycharm运行结果:
打包成exe后运行:
打开exe文件没有任何打印信息,再看任务管理器
下一张图
内存占用飙升,第一时间意识到,程序在循环开启子进程,而且并没有进入子进程执行,这令我百思不得其解,十分困扰。
毕竟python不是主流做可执行软件,网络资料十分有限,后来在某论坛找到一篇没说清楚问题的博客,不过好在实践能力强,get到了一条关键语句
关键代码:multiprocessing.freeze_support()
以上这句代码加在 if __name__ == '__main__': 的下一行,记得在文件开头import multiprocessing一下,问题完美解决
分析:开启子进程是不支持打包exe文件的,所以会不停向操作系统申请创建子进程,导致内存炸了,multiprocessing.freeze_support()就是解决这个问题的,不过由于应用不多,导致这方面资料非常少
给个赞呗~
程序猿,要对自己狠一点!