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

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()

原文链接:https://blog.csdn.net/fly_leopard/article/details/121610641

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值