【pyinstaller打包记录】程序使用多进程,打包后,程序陷入死循环
简介
PyInstaller 是一个用于将 Python 程序打包成可执行文件(可执行程序)的工具。它能够将 Python 代码和其相关的依赖项(包括 Python 解释器、依赖的模块、库文件等)打包成一个独立的可执行文件,方便在不同环境中运行,而无需安装 Python 环境和相关依赖。
使用 PyInstaller,你可以将 Python 程序打包成 Windows 的可执行文件(.exe)、Mac OS 的应用程序(.app)以及 Linux 下的可执行文件。打包后的可执行文件可以在原始操作系统之外的其他操作系统上运行(如将 Windows 上的 Python 程序打包成 Mac OS 或 Linux 下的可执行文件)。
问题
在编写python程序的时候,或多或少会用到多进程,但是使用多进程后,再使用pyinstaller打包我们的程序后,代码会陷入死循环。如Windows中,运行exe时,程序出现多个窗口,关闭以后又出现新的窗口。linux系统中,可以看到启动非常多的进程,如下图:

解决方案
在你的主程序前添加一行代码:
import multiprocessingif __name__=='__main__':# 在此处添加multiprocessing.freeze_support()# 这里是你的代码# ......
有关更多信息,请阅读有关multiprocessing.freeze_support的 Python 库手册。
PyInstaller < 3.3 和 Windows 的其他代码
从 PyInstaller 3.3 开始。添加此代码不再是必需的,它已经由运行时钩子添加。
在 Windows 上,使用 --onefile 可执行文件时,多处理代码失败。此问题特定于 Windows,它不支持 。使用默认 (--onedir) 模式时不会发生这种情况,也不会发生在其他 (Posix) 平台(如所有 Unix 和 Mac OS X 版本)上。spawn()
要在 Windows 上使用 python 模块,您需要扩展多处理代码,如下所示。有关详细信息,请参阅有关背景和票证 https://github.com/pyinstaller/pyinstaller/issues/182 的此主题。_multiprocess_
此配方需要 PyInstaller 3.0 < 3.3。
import os
import sys# Module multiprocessing is organized differently in Python 3.4+
try:# Python 3.4+if sys.platform.startswith('win'):import multiprocessing.popen_spawn_win32 as forkingelse:import multiprocessing.popen_fork as forking
except ImportError:import multiprocessing.forking as forkingif sys.platform.startswith('win'):# First define a modified version of Popen.class _Popen(forking.Popen):def __init__(self, *args, **kw):if hasattr(sys, 'frozen'):# We have to set original _MEIPASS2 value from sys._MEIPASS# to get --onefile mode working.os.putenv('_MEIPASS2', sys._MEIPASS)try:super(_Popen, self).__init__(*args, **kw)finally:if hasattr(sys, 'frozen'):# On some platforms (e.g. AIX) 'os.unsetenv()' is not# available. In those cases we cannot delete the variable# but only set it to the empty string. The bootloader# can handle this case.if hasattr(os, 'unsetenv'):os.unsetenv('_MEIPASS2')else:os.putenv('_MEIPASS2', '')# Second override 'Popen' class with our modified version.forking.Popen = _Popen
测试多处理示例:
import multiprocessingclass SendeventProcess(multiprocessing.Process):def __init__(self, resultQueue):self.resultQueue = resultQueuemultiprocessing.Process.__init__(self)self.start()def run(self):print 'SendeventProcess'self.resultQueue.put((1, 2))print 'SendeventProcess'if __name__ == '__main__':# On Windows calling this function is necessary.# On Linux/OSX it does nothing.multiprocessing.freeze_support()print 'main'resultQueue = multiprocessing.Queue()SendeventProcess(resultQueue)print 'main'
此代码片段的控制台输出应类似于
main
main
SendeventProcess
SendeventProcess
完毕!!!
相关文章:
【pyinstaller打包记录】程序使用多进程,打包后,程序陷入死循环
简介 PyInstaller 是一个用于将 Python 程序打包成可执行文件(可执行程序)的工具。它能够将 Python 代码和其相关的依赖项(包括 Python 解释器、依赖的模块、库文件等)打包成一个独立的可执行文件,方便在不同环境中运行…...
MAC | linux | SSH 密钥验证
SSH密钥登陆过程 客户端通过ssh-keygen生成自己的公钥和私钥。手动将客户端的公钥放入远程服务器的指定位置。客户端向服务器发起 SSH 登录的请求。服务器收到用户 SSH 登录的请求,发送一些随机数据给用户,要求用户证明自己的身份。客户端收到服务器发来…...
【AI Agent系列】【MetaGPT多智能体学习】3. 开发一个简单的多智能体系统,兼看MetaGPT多智能体运行机制
本系列文章跟随《MetaGPT多智能体课程》(https://github.com/datawhalechina/hugging-multi-agent),深入理解并实践多智能体系统的开发。 本文为该课程的第四章(多智能体开发)的第一篇笔记。主要记录下多智能体的运行…...
机器学习-面经(part7、无监督学习)
机器学习面经系列的其他部分如下所示: 机器学习-面经(part1) 机器学习-面经(part2)-交叉验证、超参数优化、评价指标等内容 机器学习-面经(part3)-正则化、特征工程面试问题与解答合集机器学习-面经(part4)-决策树共5000字的面试问题与解答…...
teknoparrot命令行启动游戏
官方github cd 到teknoparrot解压目录 cd /d E:\mn\TeknoParrot2_cp1\GameProfiles启动游戏 TeknoParrotUi.exe --profile游戏配置文件游戏配置文件位置/UserProfiles,如果UserProfiles文件夹里没有那就在/GameProfiles,在配置文件里将游戏路径加入之间,或者打开模拟器设置 …...
停止Tomcat服务的方式
运行脚本文件停止 运行Tomcat的bin目录中提供的停止服务的脚本文件 关闭命令 # sh方式 sh shutdown.sh# ./方式 ./shutdown.sh操作步骤 运行结束进程停止 查看Tomcat进程,获得进程id kill进程命令 # 执行命令结束进程 kill -9 65358 操作步骤 注意 kill命令是…...
多线程相关面试题(2024大厂高频面试题系列)
1、聊一下并行和并发有什么区别? 并发是同一时间应对多件事情的能力,多个线程轮流使用一个或多个CPU 并行是同一时间动手做多件事情的能力,4核CPU同时执行4个线程 2、说一下线程和进程的区别? 进程是正在运行程序的实例ÿ…...
mysql 时间精度问题
timestamp到2038年,还有14年时间,一个系统如果能活到那一刻也是相当不错了。 这里先看一下个datetime的问题,下面的插入数据的时间戳是2024-03-06 21:20:50.839 INSERT INTO psi_io_balance ( id, as_id, bill_date, order_id, busi_type, direction, c…...
基于python的爬虫原理和管理系统实现(代码下载)
Python实现爬虫的原理如下: 发送请求:使用Python中的库,如Requests或urllib,向目标网站发送HTTP请求,获取网页的内容。 解析网页:使用Python中的库,如BeautifulSoup或lxml,对获取的…...
IOS 设置UIViewController为背景半透明浮层弹窗,查看富文本图片详情
使用场景:UIViewController1 打开 UIViewController2(背景半透明弹窗) 案例:打开富文本网页<img>图片的url查看图片详情 WKWebView WKNavigationDelegate代理方法设置js代码点击事件 ///注册添加图片标签点击js方法 - …...
网络层介绍
网络层是OSI模型中的第三层,也称为网络协议层。它主要负责在源主机和目标主机之间提供数据通信的路径选择和控制。网络层通过使用源和目标主机的网络地址来实现数据包的路由和转发。 以下是网络层的一些主要功能: 路由选择:网络层使用路由选…...
springboot/ssm酒店客房管理系统Java在线酒店预约预定平台web
springboot/ssm酒店客房管理系统Java在线酒店预约预定平台web 基于springboot(可改ssm)vue项目 开发语言:Java 框架:springboot/可改ssm vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:…...
分布式测试插件 pytest-xdist 使用详解
使用背景: 大型测试套件:当你的测试套件非常庞大,包含了大量的测试用例时,pytest-xdist可以通过并行执行来加速整体的测试过程。它利用多个进程或计算机的计算资源,可以显著减少测试执行的时间。高计算资源需求&#…...
【S32K3 MCAL配置】-1.1-GPIO配置及其应用-点亮LED灯(基于MCAL)
目录(共13页精讲,手把手教你S32K3从入门到精通) 实现的架构:基于MCAL层 前期准备工作: 1 创建一个FREERTOS工程...
【软件工程】软件工程定义、软件危机以及软件生命周期
🌸博主主页:釉色清风🌸文章专栏:软件工程🌸 今日语录:What matters isn’t how others think of your ambitions but how fervently you cling to them. 软件工程系列,主要根据老师上课所讲提及…...
24计算机考研深大经验分享(计算机专业考研综合安排)
文章目录 背景科目选择高数选课一轮二轮冲刺阶段 线代一轮二轮 概率论计算机学科专业基础408数据结构计算机组成原理操作系统计算机网络总结 英语政治 末言 背景 首先贴一下初试成绩。这篇分享主要是给零基础的同学使用的,基础好的同学可以自行了解补充一下…...
【知识整理】MySQL数据库开发设计规范
一、规范背景与目的 MySQL数据库与 Oracle、 SQL Server 等数据库相比,有其内核上的优势与劣势。我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。 本规范旨在帮助或指导RD、QA、OP等技术人员做出适合线上业务的数据库设计。在数据库变更和处理…...
Vue自定义组件实现v-model
前言 v-model 实际上就是 $emit(input) 以及 props:value 的组合语法糖。 1.封装自定义组件 要在 Vue 中实现自定义组件的 v-model 功能,你可以通过使用 model 选项来定义组件的 prop 和事件。以下是一个示例代码,演示如何实现一个自定义组件并使用 v…...
【Linux】Linux网络故障排查与解决指南
🍎个人博客:个人主页 🏆个人专栏:Linux ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 检查网络连接状态: 检查路由表: 检查DNS配置: 检查网络连接状态: 检查防火墙设…...
跟着cherno手搓游戏引擎【27】升级2DRenderer(添加旋转)
水节,添加了旋转的DrawQuad: Renderer2D.h: #pragma once #include "OrthographicCamera.h" #include"Texture.h" namespace YOTO {class Renderer2D{public://为什么渲染器是静态的:static void Init();static void …...
源码编译实战:定制rpath与interpreter实现高版本glibc程序向下兼容部署
1. 为什么需要高版本glibc程序向下兼容 最近在给客户部署AI推理服务时遇到一个典型问题:开发环境用的是Ubuntu 20.04(glibc 2.31),而生产环境是CentOS 7(glibc 2.17)。直接拷贝编译好的程序运行时ÿ…...
破局MIDI控制困境:SendMIDI让命令行成为音乐创作的神经中枢
破局MIDI控制困境:SendMIDI让命令行成为音乐创作的神经中枢 【免费下载链接】SendMIDI Multi-platform command-line tool to send out MIDI messages 项目地址: https://gitcode.com/gh_mirrors/se/SendMIDI 在数字音乐制作的世界里,MIDI&#x…...
手把手教你用GDFN模块改进图像处理(附Restormer实战代码)
手把手教你用GDFN模块改进图像处理(附Restormer实战代码) 在计算机视觉领域,图像处理技术正经历着从传统方法到深度学习范式的深刻变革。作为这一变革的前沿代表,Restormer框架凭借其创新的Transformer架构,在图像去噪…...
实战:用MAF的“人机协同”功能,给你的AI工具调用加上一道安全锁(附C#代码)
企业级AI代理安全实践:基于MAF的人机协同审批架构设计 当财务系统自动驳回了一笔高管差旅报销,或是订单管理系统未经确认修改了客户历史数据时,企业往往需要付出高昂的信任成本来修复这类"自动化事故"。Microsoft Agent Framework&…...
5个高效管理技巧:用Ice实现macOS菜单栏清爽体验
5个高效管理技巧:用Ice实现macOS菜单栏清爽体验 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice macOS菜单栏作为日常操作的核心区域,常常因应用图标过多而变得杂乱无章&#…...
MozJPEG色彩空间扩展终极指南:支持RGBX、BGRX等32位格式的完整教程
MozJPEG色彩空间扩展终极指南:支持RGBX、BGRX等32位格式的完整教程 【免费下载链接】mozjpeg Improved JPEG encoder. 项目地址: https://gitcode.com/gh_mirrors/mo/mozjpeg MozJPEG作为libjpeg-turbo的增强版本,不仅提供了卓越的JPEG压缩性能&a…...
终极color库API参考手册:从入门到精通CSS颜色处理
终极color库API参考手册:从入门到精通CSS颜色处理 【免费下载链接】color 项目地址: https://gitcode.com/gh_mirrors/col/color color库是一个功能强大的JavaScript库,专为颜色转换和操作而设计,支持CSS颜色字符串,让开发…...
Pixel Dimension Fissioner 镜像深度配置:环境变量与启动参数详解
Pixel Dimension Fissioner 镜像深度配置:环境变量与启动参数详解 1. 为什么需要深度配置? 当你第一次部署Pixel Dimension Fissioner镜像时,默认设置可能已经能满足基本需求。但随着使用场景的复杂化,你会发现很多情况下需要根…...
Python实战:5分钟搞定睿尔曼机械臂与AGV底盘的Socket通信(附完整代码)
Python实战:5分钟搞定睿尔曼机械臂与AGV底盘的Socket通信(附完整代码) 在工业自动化领域,复合机器人正逐渐成为提升生产效率的关键设备。这类机器人通常由AGV(自动导引运输车)底盘和机械臂组成,…...
从零开始:在VMware虚拟机中部署Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF进行开发测试
从零开始:在VMware虚拟机中部署Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF进行开发测试 1. 准备工作与环境搭建 在开始之前,我们需要准备好必要的软件和资源。首先确保你的主机系统满足以下要求: 至少16GB内存(推荐…...
