提升爬虫的速度
提升爬虫的速度,主要有三种方法:多线程爬虫、多进程爬虫和多协程爬虫。
1.并发和并行,同步和异步
并发(concurrency):是指在一个时间段内发生若干事件的情况;
并行(parallelism):是指在同一个时刻发生若干事件的情况。
同步:就是并发或并行的各个任务不是独立运行的,任务之间有一定的交替顺序;
异步:则是并发或并行的各个任务可以独立运行,一个任务的运行不受另一个任务影响。
2.多线程爬虫
多线程爬虫是以并发的方式执行的,多个线程并不能真正的同时执行,而是通过进程的快速切换加快网络爬虫速度的。
Python本身的设计对多线程的执行有所限制。在设计之初,为了数据安全所做的决定设置有GIL(Global Interpreter Lock,全局解释器锁)。在Python中,一个线程的执行过程包括获取GIL、执行代码直到挂起和释放GIL。
每次释放GIL锁,线程之间都会进行锁竞争,而切换线程会消耗资源。由于GIL锁的存在,Python里一个进程永远只能同时执行一个线程,这就是在多核CPU上Python的多线程效率不高的原因。
Python的多线程对于IO密集型代码比较友好,网络爬虫能够在获取网页的过程中使用多线程,从而加快速度。
单线程爬虫: