You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyInstaller打包多进程CPU压力测试脚本遇ValueError错误求助

解决PyInstaller打包multiprocessing脚本后报错"invalid literal for int() with base 10: 'parent_pid=xxx'"

这个错误的核心原因是PyInstaller打包后,启动子进程时会自动添加parent_pid=xxx这类额外命令行参数,而你的脚本在解析sys.argv时没过滤这些参数,把它们当成了自己的输入去转成整数,导致报错。

以下是具体解决方案:

  • 过滤PyInstaller添加的额外参数
    找到脚本里处理sys.argv的代码(就是报错的第38行附近),先过滤掉以parent_pid=开头的参数,再进行解析。比如:

    import sys
    
    # 过滤掉PyInstaller自动添加的参数
    clean_args = [arg for arg in sys.argv if not arg.startswith('parent_pid=')]
    
    # 用clean_args替代原来的sys.argv进行后续解析
    # 比如原来的int(sys.argv[1])改成int(clean_args[1])(注意索引对应)
    
  • 确保freeze_support()放在最前面
    把multiprocessing.freeze_support()放在脚本最开头,在任何multiprocessing相关代码(包括导入子模块、定义进程函数)之前:

    import multiprocessing
    multiprocessing.freeze_support()
    
    # 下面才是你的其他代码:导入模块、定义压力测试函数、启动进程等
    
  • 避免子进程依赖sys.argv解析
    如果你的子进程入口函数里也在解析sys.argv,同样要做参数过滤,或者直接把需要的参数通过Process的args参数传递,而不是依赖命令行参数:

    def stress_test(core_num):
        # 这里直接用传入的core_num,不用从sys.argv取
        ...
    
    # 启动进程时直接传参数
    p = multiprocessing.Process(target=stress_test, args=(4,))
    p.start()
    
  • 尝试禁用UPX压缩
    有些情况下UPX压缩会干扰multiprocessing的参数传递,打包时添加--noupx参数:

    pyinstaller --noconfirm --onefile --console --noupx "...FolderName/stress_test_manager.py"
    

先检查第38行的代码,确认是哪一行在转整数,然后对应调整参数解析逻辑,基本就能解决问题。

内容的提问来源于stack exchange,提问作者kurdish sage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 15:52:18