Python多进程池的诡异行为

作者在使用Python的multiprocessing模块进行密集计算时遇到进程池卡死问题,代码在pool.starmap_async处停止且无任何错误提示。尝试使用multiprocessing.dummy模块后恢复正常,但未找出根本原因。文章提供了一个临时解决方案,并希望寻求深入的技术解释。
摘要由CSDN通过智能技术生成

Python多进程池的诡异行为

环境

系统Ubuntu18.04,python3.7,3.8

问题描述

在笔者的项目里需要进行一些密集计算,于是采用了python进程池进行加速运算,代码如下:

from multiprocessing import Pool

def deal_input(a, b, c):
    for idx, m in enumerate(a):
        d = convert_to(m)
        yield(b, c, d, idx)
        
MultiNum = 3
pool = Pool(processes=MultiNum)

res = pool.starmap_async(function, deal_input(a, b, c))
# the main processing waitting for the processing pool finish its work,
pool.close()
pool.join()

笔者遇到的问题是,前期上述代码正常运行,没有任何问题,然而突然某天,当代码运行到pool.starmap_async时,整个程序卡住,在该代码段后面添加print("````"),没任何输出,所以程序一定是在该段出现问题,诡异的是还没有任何报错,无法确定到底是什么问题引发的。

Debug

为了解决上述问题,笔者参阅附录链接提到的相关情况以及解决方案,都没有任何效果,于是我鬼使神差的改了上述代码,如下:

from multiprocessing.dumy import Pool

整个程序奇迹般的又正常工作了,修改为multiprocessing.dumy的思路来源于我一次在https://stackoverflow.com/上看到别人使用的案例。

总结

给遇到同样问题的小伙伴们一些参考,同时希望有知道根本原因的大神解释下原因,人生苦短,用python也很难。

附录

https://blog.csdn.net/mxdsdo09/article/details/119728373
https://blog.csdn.net/weixin_39640395/article/details/111063286
https://zhuanlan.zhihu.com/p/103135242

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值