最近发现,Python代码会产生很多僵尸进程,之前未发现,自从使用urllib2模块发Http请求之后,便产生了大量僵尸进程,确定是由于urllib2产生,
原始代码如下:
最开始,想当然的任务,HTTP请求不是长连接,连接会自动释放,犯了大错,虽然http不是长连接,但是打开连接之后,一些资源还是需要自己关闭,后面将代码修改为:
结果过了一段时间发现,还是会产生僵尸进程,通过日志发现,有很多104的HTTP错误,基本确定是由于http请求失败之后,导致僵尸进程,于是在请求的时候加上超时限制
经过这样修改之后,暂未发现僵尸进程,后续还需继续观察
原始代码如下:
req=urllib2.Request(url)
urllib2.urlopen(req)
最开始,想当然的任务,HTTP请求不是长连接,连接会自动释放,犯了大错,虽然http不是长连接,但是打开连接之后,一些资源还是需要自己关闭,后面将代码修改为:
req=urllib2.Request(url)
response = urllib2.urlopen(req)
response.close()
结果过了一段时间发现,还是会产生僵尸进程,通过日志发现,有很多104的HTTP错误,基本确定是由于http请求失败之后,导致僵尸进程,于是在请求的时候加上超时限制
req=urllib2.Request(url)
response = urllib2.urlopen(req,timeout=10)
response.close()
经过这样修改之后,暂未发现僵尸进程,后续还需继续观察
本文讲述了在使用Python的urllib2模块发送HTTP请求时遇到僵尸进程的问题,并分享了解决方案,包括正确关闭响应和设置请求超时。
2万+

被折叠的 条评论
为什么被折叠?



