第8章 提升爬虫的速度
通过前面7章的学习,相信读者已经能够从获取网页、解析网页、存储数据来实现一些基本的爬虫了。从本章开始,我们将进入爬虫的进阶部分,包括第8章到第13章。进阶部分的各章并没有先后顺序,对某一章感兴趣的读者可以直接跳到这章学习。
本章将介绍如何提升爬虫的速度,主要有3种方法:多线程爬虫、多进程爬虫和多协程爬虫。相对于普通的单线程爬虫,使用这3种方法爬虫的速度能实现成倍的提升。
8.1 并发和并行,同步和异步
在介绍多线程爬虫之前,首先需要熟悉并发和并行、同步和异步的概念。如果阅读完本节后仍对并发和并行、同步和异步不太理解,没有关系,你可以先学习后面的代码,毕竟阅读本书的目的是实践Python网络爬虫。
8.1.1 并发和并行
并发(concurrency)和并行(parallelism)是两个相似的概念。引用一个比较容易理解的说法,并发是指在一个时间段内发生若干事件的情况,并行是指在同一时刻发生若干事件的情况。
这个概念用单核CPU和多核CPU比较容易说明。在使用单核CPU时,多个工作任务是以并发的方式运行的,因为只有一个CPU,所以各个任务会分别占用CPU的一段时间依次执行。如果在自己分得的时间段没有完成任务,就会切换到另一个任务,然后在下一次得到CPU使用权的时候再继续执行,直到完成。在这种情况