Python因为有GIL锁,多线程一直被诟病。在CPU密集型的任务场景中Python的多线程并不是很理想,而对于像网络爬虫这样的IO密集型任务场景,Python的多线程可以在一定程度上提高任务的并行度。下面我们详细说一下: 一、原理 解释一下: master线程的run方法中,第一眼看它是个死循环,实际上它的意思是:我们从response_queue中,拿不到任务响应的时候,会抛出异常,退出循环体。拿到响应以后,调用filter方法,filter的参数是ResponseItem对象,ResponseItem中包含已抓取URL,这个方法有两个作用:第一个是保存已抓取链接,第二个是去掉待抓取链接中重复的链接。 <div '="">三、总结一下 简单的说,主线程负责任务调度,从响应队列获取任务执行结果, 往任务队列加入新的任务,子线程负责抓取任务。从任务队列获取任务,执行完成后返回结果,存放到响应队列。 |
|