前言
前面我们讲到了基本爬虫包括请求、提取和保存三个部分,这是一个基本爬虫应该有的部分,那么这时候的这个爬虫有了能爬能存的能力,但是这种能力是很弱的,弱主要体现在三点:①爬虫本身健壮性并不高,有很多情况不一定考虑到;②爬虫爬的很慢,效率很低;③防反爬能力不强,容易被Ban掉
我们在这篇博文就会就上面第二点讲讲怎么通过运用多线程和多进程来提高爬虫的工作效率.
多线程
<待补充>
多进程
首先要声明一点,多进程和多线程是两个不同的概念,别混淆了。
进程的调度:当有多个进程并行执行时,每个进程得到的时间片的时间不一样,哪个进程接受哪个请求以及执行完成的时间都是不定的,所以不处理的话会输出乱序。
python中多进程用到的模块是multiprocessing(python就是模块多…一些基本的,常用的都已经有模块了……),multiprocessing[下面简称mp]的很大的一部分与threading模块使用同一套API
只有Linux的fork()才是真正意义上的多进程,所以在Linux上就用multiprocessing库就好了
mp在多核CPU中的表现会比threading好很多,因为可以做到跑满多核。
如果操作的进程数目不大(十几左右)尚可用multiprocessing.Process类动态生成多个进程,但是如果数目很大(上百),手动限制进程数目就显得特别繁琐,这时候进程池就派上用场了。
进程池:Pool【感觉已经是mp的高级用法了】,可以提供指定数量的进程供用户调用,每当有请求提交到Pool的时候,如果进程池还没有满,就会创建一个新的进程来执行请求,如果进程满了,则请求将会被告知先等待,直至进程池中有进程结束才会放入,以执行请求。
简单来说,就是进程池可创建多个进程,这些进程就像是随时待命的士兵,准备执行任务。
1.在Unix平台上,当某