多线程爬虫的结构-施耐德按钮开关的选型手册
图1.14多线程爬虫的结构对于并行爬虫架构而言,处理空队列要比序列爬虫更加复杂。空的队列并不意味着爬虫已经完成了工作,因为此刻其他的进程或者线程可能依然在解析网页,并且马上会加入新的URL。进程或者线程管理员需要给报告队列为空的进程/线程发送临时的休眠信号来解决这类问题。线程管理员需要不断跟踪休眠线程的数目;只有当所有的线程都休眠的时候,爬虫才可以终止。 1.5.3一个简单的多线程爬虫实现以下是一个多线程爬虫程序的主线程部分和子线程部分,主线程启动子线程并等待所有子线程执行完成后才退出,实际代码如下: threadList = new ArrayList(THREAD_NUM); for (int i = 0; i < THREAD_NUM; i++) { Thread t = new Thread(this, "Spider Thread #" + (i+1)); t.start(); threadList.add(t); } //当前线程等待子线程退出while (threadList.size() > 0) { Thread child = (Thread)threadList.remove(0); child.join(); //等待这个线程执行完}子线程主要的执行程序如下: //从TODO取出要分析的URL地址,同时把它放入Visited表public synchronized NewsSource dequeueURL() throws Exception { while (true) { if (!todo.isEmpty()) { NewsSource newitem = (NewsSource)todo.removeFirst(); visited.add(newitem.URL,newitem.source); www.52pdf.net
用户评论