This topic created in 5124 days ago, the information mentioned may be changed or developed.
在写一个爬虫,用Queue配合thread来实现线程池,爬完一个地址,调用一次queue.task_done()
但在爬的过程中,有可能出一些Error,比如TimeOutError什么的,这样的话线程就挂了,永远也不会返回,也就调用不了queue.task_done(),最后就卡住了
请问这种情况该如何处理?
我想的是重写个queue.join(),在其中判断queue是否为空,如果是空的,就说明已经都爬完了,然后就退出,有没有更好的解决方法?
11 replies • 1970-01-01 08:00:00 +08:00
 |
|
1
quake0day May 27, 2012 2
try catch pass 不行?
|
 |
|
2
Livid May 27, 2012 2
用 try catch 处理异常。
|
 |
|
4
INT21H May 27, 2012 1
global队列,然后 while len(q) > 0: try-except判断是否timeout,若timeout,该线程q.get()
不能让一个线程挂掉
|
 |
|
5
Livid May 27, 2012 2
或者你可以重新写一下你的程序,用 celery 来实现多任务并行处理。
|
 |
|
6
sivacohan May 27, 2012 1
守护进程。。。。 我是这么干的,一会检查一下那些进程挂掉了。。。。
|
 |
|
7
clowwindy May 27, 2012 1
try except finally 为什么不行?楼主贴一下 except 代码,和异常堆栈信息看看。
|
 |
|
8
reus May 27, 2012 1
用multiprocessing.Pool
|
 |
|
10
gonbo May 28, 2012
scrapy 这种框架已经很无敌啦。。。。
|
 |
|
11
zealot Jun 9, 2012
scrapy +1
|