爬虫卡住无报错信息 |
您所在的位置:网站首页 › java运行不出来又不报错怎么办 › 爬虫卡住无报错信息 |
用了requests库,爬取了一晚上,程序在某个页面hang住了,没有任何报错信息,也不退出,也不前进,日志和进程查不出问题。 操作回顾: 查看nohup.out,无任何异常数据; 查看程序log,在183页有数据,184页数据未出现; ps aux |grep 查看进程,未占用大量cpu和内存,排除死循环; 查看代码,未使用多线程多进程,排除死锁; 查看问题进程打开的文件,lsof -p xx,发现最后打开的文件是建立了2个tcp连接,并且一直未断开,考虑io阻塞的可能性; 再次查看代码,设置了io连接重试,未设置连接超时,但自己一直以为requests库有默认超时,故不得其解; 再次lsof查看,跟进lsof -i:port看建立的是什么连接端口,发现是https 网上搜索requests库超时重试问题,得到下面一句话: 读取超时是没有默认值的,如果不设置,程序将一直处于等待状态豁然开朗! 一直以为的默认超时是连接超时,默认2s,并且session中通过adapter设置的retry重试也是简单的默认针对连接超时超时,除非使用Retry对象详细指定超时机制。 解决方法: request.get方法设置timeout=(5,10),如果简单的设置timeout=5还是设定的连接超时。默认超时一直等到是为了防止下载流连接的情况。然后可以用Retry指定session中的adapter读取超时重试次数; |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |