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

news/2024/5/19 22:29:16 标签: python, 开发语言, pyinstaller, multiprocessing

问题现象

我用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_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()没有任何影响。


http://www.niftyadmin.cn/n/5040247.html

相关文章

【Mysql主从配置方法---单主从】

Mysql主从 主服务器 创建用户 create user “for_rep”“从服务器IP地址” IDENTIFIED by “123456” 授权 grant replication slave on . to “for_rep”“从服务器IP地址” IDENTIFIED by “123456” 查看用户权限 SHOW GRANTS FOR “for_rep”“从服务器IP地址”; 修改M…

远程拷贝Windows上的文件到Linux指定的文件夹

Linux系统电脑之间使用scp命令拷贝十分方便,但是对于windows和Linux之间的远程拷贝就没那么方便,特别是对于车载嵌入式的开发人员,很多软件或者license没有对应的Linux版本,需要远程刷写软件来回切换十分不方便,今天介…

C++流插入和流提取的重载!

C作为C语言的衍生,其弥补了C语言中的很多不足,也对C语言进行了一定的优化!今日就来讲解一下C中输入/出流相关的知识!以及对输入/出的重载!,希望读完本篇文章,能让读者们对C中输入/出流有更深一步…

WebGL 选中物体

目录 前言 如何实现选中物体 示例程序(PickObject.js) 代码详解 gl.readPixels()函数规范 示例效果 前言 有些三维应用程序需要允许用户能够交互地操纵三维物体,要这样做首先就得允许用户选中某个物体。对物体…

借助reCAPTCHA实现JavaScript验证码功能

前言 验证码(CAPTCHA)是一种常见的安全验证机制,常用于区分真实用户和机器人。使用验证码可以有效防止恶意登录、自动注册或者密码爆破等攻击。本文将借助reCAPTCHA第三方库来实现JavaScript验证码功能。 验证码的原理 验证码的核心思想是要…

利用大模型知识图谱技术,告别繁重文案,实现非结构化数据高效管理

我,作为一名产品经理,对文案工作可以说是又爱又恨,爱的是文档作为嘴替,可以事事展开揉碎讲清道明;恨的是只有一个脑子一双手,想一边澄清需求一边推广宣传一边发布版本一边申报认证实在是分身乏术&#xff0…

如何向PDB文件添加双键

在用PDB文件进行分子绘图的时候(制作OBJ),发现像Atomic blender插件和PDB本身并不支持双键,需要对PDB文件进行修改,参照的该yt链接https://www.youtube.com/watch?vYNoow7qkwFA&t364s&ab_channelEdvinFako 即…

Kafka实现保证一批消息顺序生产消费的方案

背景 Apache Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者和生产者之间的所有实时数据。在Kafka中,消息是以topic为单位进行归类的,而每个topic又可以分为多个partition,以实现数据的高效存储和并发处理。然而…