解決python使用multiprocessing多線程打包成exe文件后內(nèi)存爆裂
2023-03-15 19:52 作者:眾創(chuàng)云 | 我要投稿
關(guān)于Python進程池pool與pyinstaller打包exe程序運行的奇怪問題!
最近想吧自己寫的py文件打包成exe文件給別人用,學(xué)習(xí)了pyinstaller也基本會用了,但是在打包多進程程序的時候遇到奇怪問題,向各位求解。
我吧程序簡化了下:
但是用pyinstaller 打包EXE文件,問題來了,打包過程也很簡單>pyinstaller -F XXX.py
然后我執(zhí)行EXE文件,意向不到的結(jié)果來了,死循環(huán)?。。。。。。。。。?!不會結(jié)束。
出坑:解決了?。。。。。。。。。。。?!
在if __name__ == '__main__':?中加入:multiprocessing.freeze_support()?
即:
知識點:
1、因為開啟子進程是不支持打包exe文件的,所以會不停向操作系統(tǒng)申請創(chuàng)建子進程,
而這個代碼 multiprocessing.freeze_support() 作用就是支持打包到Windows的EXE文件。
2、多進程的程序運行后,如果直接關(guān)閉控制臺窗口,那么整個程序都會退出。
如果是 進入 任務(wù)管理器,單獨結(jié)束 控制窗口 的進程,如果子進程不是守護進程,那么子進程還是會繼續(xù)運行。
3、如果是多線程的,則沒這個問題,可以直接打包。
但有個小提示, 如果是 tkinter 的圖形界面運行的,是多線程的話,如果子線程不是守護線程,那么關(guān)掉主界面后,子線程會繼續(xù)運行。
如果也是控制臺窗口的話,效果和上面 2 提到的進程效果一樣。
標簽: