栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python3 multiprocessing windows环境下 pyinstaller打包exe运行无限创建进程问题

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python3 multiprocessing windows环境下 pyinstaller打包exe运行无限创建进程问题

mulitprocessing模块在window环境下使用有诸多限制,需要注意,其中之一就是在main.py下使用multiprocessing启动子进程问题:

该问题在pycharm中没有,pycharm环境下运行调试都是正常的,当使用pyinstaller打包为exe文件时,双击exe文件运行,会进入无限创建进程的死循环,最终导致系统崩溃,所有cpu跑满。

导致该问题的根本原因是:windows环境下python通过启动进程创建子进程时,子进程启动会导入父进程的py文件,运行父进程的创建子进程代码导致陷入无限循环(这只是windows下出现的问题的一种形式,还有其他形式, 官文上说叫导入主模块产生的副作用,)
 

针对该情况,multiprocessing提供了freeze_support来实现main module的安全导入,在运行multiprocessing创建进程前调用该方法:

....

if __name__ == '__main__':
    import multiprocessing
    # 该方法作用是阻止子进程运行其后面的代码
    multiprocessing.freeze_support()
    pool = Pool(3)
    try:
        log.info("Start Program.")
        pool.apply_async(start_queue_manager, error_callback=error_callback)
        pool.apply_async(start_server, error_callback=error_callback).ready()
        pool.apply_async(start_browser, error_callback=error_callback)
    except:
        log.error(traceback.format_exc())
    finally:
        pool.close()
        pool.join()

参考:Safe importing of main module

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/618896.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号