python多进程卡死_python multiprocessing子进程hangs问题

本文探讨了在Python中使用multiprocessing库时遇到的子进程挂起问题,特别是涉及torch和OpenMP操作时。挂起的原因可能包括OpenMP的不正确使用、数据规模过大以及Apple Accelerate库的限制。解决方法包括切换multiprocessing的启动模式(如使用spawn或forkserver)、限制OpenMP的线程数,或改用支持的库如OpenBLAS。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0.前言

此文诞生源于python多进程的一个诡异表现,如果你使用pytho多进程过程中,发现子进程被挂起(一直处于Sleeping),请参考本文档。

本文先简单介绍python多进程常规用法,然后主要说说这个bug的根源,以及如何解决。

1.python多进程使用

python多进程库是multiprocessing,一般我们常用它的Pool,怎么用直接看示例代码。

ps : 这里只是简单来一个示例,因为默认大家了解python基本的多进程使用,想了解其他的请自行google

# multiprocessing.Pool 示例

def subprocesses(argv):

"""do Subprocesses job"""

print(f"argv ={argv}")

sleep(1)

return argv

if __name__ == '__main__':

pool = multiprocessing.Pool(processes=4)

results = []

for i in xrange(10):

msg = "hello%d" %(i)

sub_res = pool.apply_async(func, (msg, ))

results.append(sub_res)

pool.close() # 关闭进程池,表示不能再往进程池中添加进程,需要在join之前调用

pool.join() # 等待进程池中的所有进程执行完毕

print ("Sub-process(es) done.")

for res in results:

# get函数获取子进程返回结果

print (res.get())

2.python多进程中子进程hangs问题

先看一段代码

impo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值