高性能异步爬虫
1.引入
很多同学对于异步这个概念只是停留在了“听说很NB”的认知层面上,很少有人能够在项目中真正的使用异步实现高性能的相关操作。接下来,咱们就一起来学习一下,爬虫中如何使用异步实现高性能的数据爬取操作。
2.背景
其实爬虫的本质就是client发请求批量获取server的响应数据,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行,那只能等待爬取一个结束后才能继续下一个,效率会非常低。
所以单线程下串行多个爬虫任务是比较低效的,是因为爬虫任务是明显的IO密集型(阻塞)程序。那么该如何提高爬取性能呢?查看下述的分析测试!
3.处理方案 协程
-
无论多进程还是多线程哪种解决方案其实没有解决一个性能相关的问题:
- IO阻塞,无论是多进程还是多线程,在遇到IO阻塞时都会被操作系统强行剥夺走CPU的执行权限(使得cup执行其他操作,其他操作可能是我们程序的其他部分,也可能是其他的应用程序),我们自己程序的执行效率因此就降低了下来。
IO阻塞的时候,和CPU没关系了
输入和输出,IO操作其实就限制你程序运行的效率
- IO阻塞,无论是多进程还是多线程,在遇到IO阻塞时都会被操作系统强行剥夺走CPU的执行权限(使得cup执行其他操作,其他操作可能是我们程序的其他部分,也可能是其他的应用程序),我们自己程序的执行效率因此就降低了下来。