当前位置: 首页 > news >正文

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__'

from multiprocessing import Process, freeze_supportdef f():print('hello world!')if __name__ == '__main__':freeze_support()Process(target=f).start()

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

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

http://www.lryc.cn/news/172184.html

相关文章:

  • 数据结构与算法——13.队列的拓展
  • 机器学习入门教学——损失函数(交叉熵法)
  • pytest一些常见的插件
  • 基于51单片机多路DTH11温湿度检测控制系统
  • 宝塔重装注意事项
  • 【MySQL】 MySQL的增删改查(进阶)--壹
  • Map<K,V>的使用和List学习
  • Flask实现Web服务调用Python程序
  • 步步为营,如何将GOlang引用库的安全漏洞修干净
  • as-if-serial与happens-before原则详解
  • 基于Yolov8的工业小目标缺陷检测(2):动态蛇形卷积(Dynamic Snake Convolution),实现暴力涨点 | ICCV2023
  • ARM64汇编基础
  • Nodejs 第十六章(ffmpeg)
  • k8s集群部署es
  • 学习记忆——宫殿篇——记忆宫殿——记忆桩——火车+外院+客厅+卧室
  • QT用户登录注册,数据库实现
  • GEE学习总结(9)——像元二分法计算月度植被覆盖度(MODIS)
  • RabbitMQ用户命令_策略_日志
  • 停车场系统、智慧城市停车、智慧社区、物业管理、新能源充电、人脸门禁 uniapp 系统源码
  • Linux磁盘管理
  • vue学习之vue cli创建项目
  • K8S:Pod容器中的存储方式及PV、PVC
  • uni-app跳转到另一个app
  • 如何通过一键导出导入数据实现批量重命名文件名称
  • CTF —— 网络安全大赛(这不比王者好玩吗?)
  • 3D模型转换工具HOOPS Exchange如何实现OBJ格式轻量化?
  • 命令模式-
  • 进程的管理
  • 绿色科技:可持续发展的创新解决方案
  • 安防视频/视频汇聚平台EasyCVR使用onvif探测添加设备通道详细步骤来啦!