用selenium写了一个爬动态网页的爬虫,用的ie,因为有很多IO,爬的太慢了想要用多线程。但是有以下报错不知道什么原因,希望大神解答啊
selenium.common.exceptions.WebDriverException: Message: Error 404: Not Found
Not Found
以下是写的多线程的部分代码
while not q.empty(): spy1 = spyder(q.get()) spy2 = spyder(q.get()) spy1.start() spy2.start() spy1.join() spy2.join() print(q.qsize()) print(index) index +=1
把spy2去掉就可以正常跑了。
你这个循环写的有问题,外边只是判断q是不是为空而里面却取了两次,在q中只有一条数据的时候肯定spy2取不到数据
而且这块实现一般不是这样来用线程的,消费者应该是各自为寨,抽数据去处理,没有需要强行join的
q.put我在前面已经写好了。我发现问题在哪里了,我需要开两个browser才行。。
什么叫各自为寨呀?join的用法我不太懂,看到其他的例子都会join,可以解答一下吗~
@qinhyu: 这里你要分两段看,第一段是生产者如何将消息加入q,这里会是一个单独的线程。
另外一边是消费者如何去消费一个q,一般是一个死循环对q做判断,如果有消息则把消息抽出来往线程池中放,而线程池(不清楚python中有没有,如果没有可以自行实现一个简单的,即一个包含多个线程的对象,接受到消息后选择idle的线程去执行,如果没有idle的线程可以阻塞住这里,避免继续执行)则负责消耗消息。join的地方一般只有在需要退出时才做的,