pyinstaller打包之后的windows程序无法正常运行多进程(multiprocessing与argparse)

pyinstaller打包之后的windows程序无法正常运行多进程(multiprocessing与argparse)

一、windows环境下无法共享全局变量的值

同样的代码分别在linux环境以及windows环境有很大区别

代码片段:

# new_list,list_success_table是全局变量
print('task id:',task_id,'list_success_table:',list_success_table,'new_list:',new_list)

Linux环境正常输出全局变量list_success_table,new_list:
在这里插入图片描述

Windows环境运行无法获取到全局变量:

在这里插入图片描述

解决方法:

使用传参的方式传递变量值,例如:

process = multiprocessing.Process(target=mig_table_task_total, args=(p_id,new_list[0][p_id]))


原先只有p_id这一个输入参数,现增加new_list[0][p_id]),本例为list类型为输入参数

二、使用argparse命令行工具以及multiprocessing运行可执行文件报错

报错如下:

参数error: unrecognized arguments: --multiprocessing-fork parent_pid=37636 pipe_handle=1128

原因:
windows环境打包之后的可执行文件,在运行的时候会隐式生成命令行选项--multiprocessing-fork,会在运行多进程方法报错,然而在Linux环境运行一点问题没有。

解决方法:

需要改2个地方

1、 命令行参数方面修改

原参数是这么写的


parser.add_argument('--quite_mode', '-q', help='quite mode mig', action='store_true',
                    default='false')
parser.add_argument('-v', '--version', action='version', version=version + release_date, help='Display version')
args = parser.parse_args()


改为如下:
parser.add_argument('--quite_mode', '-q', help='quite mode mig', action='store_true',
                    default='false')
parser.add_argument('-v', '--version', action='version', version=version + release_date, help='Display version')

args, unparsed = parser.parse_known_args() 
# parse_known_args.只解析正确的参数列表,无效参数会被忽略且不报错,args是解析正确参数,unparsed是不被解析的错误参数,win多进程需要此写法

2、另外需要在main函数下方使用freeze_support()
if __name__ == '__main__':
    multiprocessing.freeze_support()

不然会一直从头循环运行本程序
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
如果使用PyInstaller的`-w`选项打包完成后程序无法运行,可能是因为程序缺少一些必要的依赖项,或者是因为`-w`选项在某些情况下会导致程序无法正常运行。 以下是一些可能的解决方案: 1. 添加缺少的依赖项 使用`-w`选项打包程序可能会导致一些依赖项无法被自动检测到和打包,因此需要手动添加这些依赖项。可以使用`--add-data`选项或`--add-binary`选项来添加缺失的依赖项。例如: ``` pyinstaller -w --add-data "path/to/dependency;dependency" your_script.py ``` 其中,`path/to/dependency`是依赖项的路径,`dependency`是依赖项在打包程序中的路径。 2. 使用虚拟环境 在打包程序之前,建议使用虚拟环境来避免依赖项冲突。可以使用`virtualenv`或`conda`等工具来创建虚拟环境,并在虚拟环境中安装程序所需的依赖项。 3. 不使用`-w`选项 如果使用`-w`选项打包程序无法正常运行,可以尝试不使用该选项来打包程序。这样打包后的程序会显示一个黑色的控制台窗口,但可以更容易地定位和解决问题。 4. 更新PyInstaller版本 如果以上方法都无法解决问题,可以尝试更新PyInstaller版本。可能存在一些已知问题,这些问题在新版本中已经得到了修复。可以使用以下命令来更新PyInstaller: ``` pip install --upgrade pyinstaller ``` 以上是一些可能的解决方案,如果问题仍然存在,建议查看PyInstaller的官方文档或向PyInstaller社区寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值