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

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() # 等待进程池中的所有进程执行完毕

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值