爬虫卡住无报错信息

您所在的位置:网站首页 java运行不出来又不报错怎么办 爬虫卡住无报错信息

爬虫卡住无报错信息

2024-03-15 14:22| 来源: 网络整理| 查看: 265

用了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