[求助]爬虫假死

2017-07-28 19:12:58 +08:00
 devzero
大概是这样的
Python3.5,for 循环里面用 requests 下载页面
大概 20 分钟后程序假死,表现出以下现象:

按 Ctrl+C 无反应,只能结束掉进程
无任何报错
结束掉以后重新启动可正常运行
电脑已经设置为禁止休眠
多开运行时不同进程停止的时间不一样

不排除网站限制以及网络原因造成的问题
请问大家有没有什么解决问题的思路
多谢
3397 次点击
所在节点    Python
10 条回复
golmic
2017-07-28 19:51:56 +08:00
我感觉还是你电脑的 问题吧,你换台电脑试试。看你的描述的话看不出什么别的问题,最好还是贴出代码。
tumbzzc
2017-07-28 20:19:12 +08:00
首先把代码优化了吧,for 循环里面用 requests
takeoffyoung
2017-07-28 20:38:26 +08:00
手动处理下 signal
lxy
2017-07-28 20:55:58 +08:00
设置 timeout
trys1
2017-07-28 22:14:37 +08:00
看到很多朋友都在问爬虫是一种什么动物,那么今天我在这里就给大家讲解一下吧。爬虫是一种存在于互联网的一种虫。就像计算机病毒是一种存在于计算机的病毒。要解决计算机病毒,必须给计算机吃药。那么同理,要消灭爬虫,必须给互联网的这种虫吃杀虫剂。爬虫有一个比较狡猾的特点,就是遇到未知的食物。会假装自己已经死了,就是俗称的假死。所以解决你这个问题的方法就是加大杀虫剂的剂量。
cdwyd
2017-07-28 22:24:04 +08:00
如果多线程可能是死锁
还遇到过一种情况是同一个脚本在一台电脑上完全没问题,另一台就时不时假死,怀疑是 python 和系统的关系
aaronzjw
2017-07-28 22:46:20 +08:00
换台电脑试试?
fiht
2017-07-28 23:27:07 +08:00
1. 你给 request 加个 timeout,官方文档里面讲如果在没有 timeout 的情况下 tcp 连接不断的话 request 会一直挂起(没记错的话是这么描述的)
2. 打 log,看爬虫是请求哪条 URL 时候被挂起的,尽量复现漏洞
3. 上面搞不定的话可以贴一小段代码上来,楼下讲可以给你解决
RLib
2017-07-28 23:59:55 +08:00
linux 还是 windows, 生成 dump 看调用堆栈
devzero
2017-07-30 08:19:37 +08:00
@RLib @fiht @aaronzjw @cdwyd @trys1 @lxy @takeoffyoung @tumbzzc @golmic
感谢各位的回复,的确是 timeout 的问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/378702

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX