python应用中使用了multiprocessing多进程,使用pyinstaller打包出来的程序可能产生多个窗口

问题现象

我用pyside(类似pyqt)开发了一个应用程序。直接使用pycharm运行,一切都正常。但当我使用pyinstaller将它打包之后,再去运运行,发现窗口总是产生多个。

问题分析

直接运行没有问题,那么问题肯定和pyinstaller相关。在网上搜索之后发现是由多进程引起的(multiprocessing模块)。

在他的wiki中有说明:

使用该multiprocessing模块时,必须调用

multiprocessing.freeze_support()

紧接在if name == 'main':主模块行之后。

这在Python官方文档中也有说明:
multiprocessing.freeze_support()

添加对使用multiprocessing已冻结的程序生成 Windows 可执行文件的支持。(已使用py2exe、 PyInstaller和cx_Freeze进行测试。)

需要在主模块行之后直接调用此函数。例如:if __name__ == '__main__'

py 复制代码
from multiprocessing import Process, freeze_support

def f():
    print('hello world!')

if __name__ == '__main__':
    freeze_support()
    Process(target=f).start()

如果freeze_support()省略该行,则尝试运行冻结的可执行文件将引发RuntimeError。

在 Windows 以外的任何操作系统上调用时,调用freeze_support()都无效。另外,如果该模块在Windows上由Python解释器正常运行(程序没有被冻结),则freeze_support()没有任何影响。

相关推荐
何以解忧,唯有..1 小时前
Pydantic 介绍与使用:Python 数据校验的现代方案
数据库·python·microsoft
kyle~1 小时前
C++_STL---迭代器失效
开发语言·c++
又幸福了哥2 小时前
Python入门到高级(知识点七)
python
Brilliantwxx2 小时前
【C语言】 初入嵌入式C语言复习(基础+进阶面试题)
c语言·开发语言
熊野君3 小时前
附录与 Codex 实操手册
开发语言·人工智能·产品经理
又幸福了哥3 小时前
Python入门到高级(知识点六)
python
维克兜率天3 小时前
【维克】动量指标家族:RSI、ROC、CCI、Momentum全面解析
python·算法
XZ-0700014 小时前
week2-1-可视化
开发语言·python
Java后端的Ai之路4 小时前
14、Python - 责任链模式
服务器·开发语言·人工智能·python·责任链模式
张人玉4 小时前
基于 Python 机器学习 与 PyQt5 桌面框架开发的可视化分析系统——基于大数据的网上购物消费行为分析可视化大屏
python·qt·机器学习·echarts·three.js