欢迎光临散文网 会员登陆 & 注册

解决python使用multiprocessing多线程打包成exe文件后内存爆裂

2023-03-15 19:52 作者:众创云  | 我要投稿

关于Python进程池pool与pyinstaller打包exe程序运行的奇怪问题!

最近想吧自己写的py文件打包成exe文件给别人用,学习了pyinstaller也基本会用了,但是在打包多进程程序的时候遇到奇怪问题,向各位求解。

我吧程序简化了下:

但是用pyinstaller 打包EXE文件,问题来了,打包过程也很简单>pyinstaller -F XXX.py

然后我执行EXE文件,意向不到的结果来了,死循环!!!!!!!!!!!不会结束。

出坑:解决了!!!!!!!!!!!!!

在if __name__ == '__main__': 中加入:multiprocessing.freeze_support() 

即:

知识点:
1、因为开启子进程是不支持打包exe文件的,所以会不停向操作系统申请创建子进程,
而这个代码 multiprocessing.freeze_support() 作用就是支持打包到Windows的EXE文件。

2、多进程的程序运行后,如果直接关闭控制台窗口,那么整个程序都会退出。
如果是 进入 任务管理器,单独结束 控制窗口 的进程,如果子进程不是守护进程,那么子进程还是会继续运行。

3、如果是多线程的,则没这个问题,可以直接打包。
但有个小提示, 如果是 tkinter 的图形界面运行的,是多线程的话,如果子线程不是守护线程,那么关掉主界面后,子线程会继续运行。
如果也是控制台窗口的话,效果和上面 2 提到的进程效果一样。


解决python使用multiprocessing多线程打包成exe文件后内存爆裂的评论 (共 条)

分享到微博请遵守国家法律