环境
系统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