解决joblib.Parallel打包为exe运行报错的问题

本文介绍了如何使用PyInstaller将Python脚本打包成独立的exe程序,并解决了使用joblib.Parallel模块时遇到的运行错误。通过替换为multiprocessing.Pool以及猴子补丁方法,实现了在exe中正确运行多线程任务。同时,添加了multiprocessing.freeze_support()以确保程序在冻结环境下正常工作。
摘要由CSDN通过智能技术生成

一、pyinstaller打包为exe

1.pyinstaller -F XXX.py

-F是打包为一个完整的exe程序

二、解决joblib.Parallel打包为exe运行报错的问题

1.利用multiprocessing.Pool替换joblib.Parallel模块

代码如下(示例):

from multiprocessing import Pool
po = Pool(3)#3是计划启动的线程个数
for i in range(10):
	po.apply_async(target, (args))#target是目标函数,args是函数的参数,apply_async是各个进程分开执行,不阻塞
po.close()# 关闭进程池,关闭后po不再接受新的请求
po.join()#阻塞主进程,等到上诉进程执行完毕再继续执行

#利用上述方法需要添加multiprocessing.freeze_support()函数,且必须添加在if __name__ == "__main__":下面,如下:
if __name__ == "__main__":
multiprocessing.freeze_support()

2.利用猴子补丁修改Parallel

参考链接:https://github.com/joblib/joblib/issues/1002
代码如下:

import joblib
#每一次使用Parallel之前都先调用该函数
def change_jolib_parallel_prefer(prefer='threads'):
    _original_init = joblib.parallel.Parallel.__init__

    def _monkey_patched_init(self, *args, **kwargs):
        kwargs['prefer'] = prefer
        _original_init(self, *args, **kwargs)

    joblib.parallel.Parallel.__init__ = _monkey_patched_init
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值