1
102400 2016-10-06 15:21:24 +08:00 1
难道不是 IO 的问题?
|
2
a87150 2016-10-06 15:30:15 +08:00 1
py2 和 py3 混一起?
|
3
9hills 2016-10-06 15:34:41 +08:00 1
也有可能是网络卡住了, request 要加 timeout
|
4
aabbccli 2016-10-06 15:42:23 +08:00 1
楼上正解
|
5
hohoho OP |
6
a87150 2016-10-06 16:34:47 +08:00
|
7
BiggerLonger 2016-10-06 16:49:14 +08:00
except ProxyError:
self.proxies_list.remove(proxy) self.crawl(url) 难道不是这个吗?重复调用, 不断 ProxyError 就不断死循环 |
8
titianxingdaozhe 2016-10-06 16:54:23 +08:00
你不是死锁,而且网路断开后,没有写处理相关异常的组件吧?他就一直维持死循环了。
|
9
rale 2016-10-06 17:17:47 +08:00
@9hills 是对的, @hohoho 你这个存在死锁的可能性非常少, 你用 pycharm 跟踪一下,你会发现没有默认的 timeout , timeout 要自己加。 python2 自带的 urllib 包里面也有这种问题。另外,你可以看到你这个进程的 channel 状态是 sk_wait_data ,就算用 curl 也可能出现你这种问题: http://stackoverflow.com/questions/20576369/wget-hanging-script-stops
|
10
lizon 2016-10-06 17:40:23 +08:00
加 log ,看日志,分析停在什么地方了
感觉程序停止的情况有很多,死循环,超时,死锁,异常 catch 了没抛出等等,具体问题具体分析 |
11
hohoho OP 多谢大家,已经按照 @9hills 说的解决此问题。
@a87150 python 语法不是太熟,还不太清楚 2 和 3 的具体区别,看别人项目照葫芦画瓢写的。 @BiggerLonger @titianxingdaozhe 谢谢提醒,只是代理错误的话不会陷入死循环,但是代理池空了且 ip 被封了时会陷入死循环, 这里还未做处理。 @rale 确实是这个问题。 |
12
ddddnxzy 2016-10-07 14:18:20 +08:00
在 linux 上就 strace 查看下。
使用 requests 的时候需要注意默认是没有加 timeout 的。 |