概述
在介绍如何提升爬虫的速度之前,首先需要熟悉并发和并行、异步和同步的概念。
一、并发和并行
并发(concurrency)和并行(parallelism)是两个相似的概念。通俗来说,并发是指在一段时间内发生若干事件的情况,并发强调的是***一段时间内***;并行是指在同一时刻发生若干事件的情况,并行强调的是在***同一时刻***。
我们买电脑的是时候,配置单里面有一项会说明你的CPU是单核还是多核的,现在一般的电脑可能都有8核,如果不清楚自己电脑是几核的,可以参考以下python代码查询:
from multiprocessing import cpu_count
print(cpu_count())
当我们在使用单核CPU的时候,多个工作任务是以并发的方式运行的,因为只有一个CPU在工作,所以各个任务会分别占用CPU一段时间来依次执行。如果在自己分得的时间段没有完成任务,CPU就会自动切换到另一个任务,然后在下一次得到CPU时间使用权的时候继续执行,直到所有任务完成。在这种情况下,因为各个任务的执行的时间段很短、切换时间很快,所以给我们的感觉就像是多个任务在“同时”进行。
我们在单核层面理解了并发,那么并行就很好理解了,并发就是CPU单核在一段时间内“同时”进行多个任务,并行就是CPU的多个核的任务同时进行,这里的同时是真正的同时。
举个通俗的例子来理解,比如我们的任务是吃完一碗米饭和一碗青菜,“并发”就是一个人(单核)吃,这个人吃一口菜然后吃一口饭,但是由于切换速度很快,让我们觉得是在“同时”吃米饭和青菜;“并行”就是两个人(多核)同时吃,一个人吃饭,一个人吃菜,是真正的同时。
同步和异步
同步和异步也是两个值得比较的概念,下面再并发和并行框架的基础上讲述我理解的同步和异步。同步就是并发或并行的各个任务不是独立运行的,任务之间有一定的交替顺序,可能在运行完一个任务得到结果后,另一个任务才会开始运行。就像接力赛跑一样,要拿到交接棒之后下一个选手才可以开始跑。
异步则是并发或并行的各个任务可以相互独立的运行,一个任务不会受到其他任务的影响,任务之间就像比赛的各个选手在不同的赛道比赛一样,跑步的速度不受其他赛道选手的影响。
在我们进行网络爬虫时,假设需要爬取5个不同的网站上的信息,IO过程就相当于网站加载的过程,CPU就是我们单击“打开”的动作。单击的动作很快,但是网站加载的很慢。同步IO就是指我们每次单击一个网址,要等待网站全部加载完才可以单击下一个网址,就像我们之前使用的爬虫,我么必须等一个网址数据爬完才能进行下一个爬取网址任务。
异步IO则是指单击完一个网站后,我们不需要等待网站全部加载完,在它加载的过程中,立马可以用一个新的浏览器窗口打开我需要爬取的另一个网站,以此类推,最后同时等待5个网站全部加载完。
很明显,异步的速度要快的多。
最后
以上就是从容老虎为你收集整理的如何提升爬虫的速度一、并发和并行同步和异步的全部内容,希望文章能够帮你解决如何提升爬虫的速度一、并发和并行同步和异步所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复