最近一直”不务正业“,研究爬虫。。然后研究到Spider的效率问题时,就遇到了一些麻烦。。。本来这些东西也可以整合在Exercise那篇文章里的,但是觉得单独开篇,能凸显它的重要性~

何为异步?何为多线程?何为多进程?

异步

Asyncio模块,等把Scrapy弄懂再学一下自己写高效的爬虫

多线程

I/O密集等待时间过多采取多线程

所谓IO密集型任务,是指磁盘IO、网络IO占主要的任务,计算量很小。比如请求网页、读写文件等。当然我们在Python中可以利用sleep达到IO密集型任务的目的。

可用:

  1. thread模块_thread,提供低等级接口
  2. threading模块,提供更容易使用的基于对象的接口,可以继承Thread对象来实现线程,此外其还提供了其它线程相关的对象,例如Timer,Lock等。

多进程

计算密集采取多进程充分利用CPU多核心优势

所谓计算密集型任务,是指CPU计算占主要的任务,CPU一直处于满负荷状态。比如在一个很大的列表中查找元素(当然这不合理),复杂的加减乘除等。

可用:mutliprocess模块,提供了很多容易使用的基于对象的接口。另外它提供了封装好的管道和队列,可以方便的在进程间传递消息。Python还提供了进程池Pool对象,可以方便的管理和控制线程。

参考资料

Python进阶:聊聊IO密集型任务、计算密集型任务,以及多线程、多进程

Python进阶:理解Python中的异步IO和协程(Coroutine),并应用在爬虫中

拥有属于自己的Python爬虫框架--练习编写多线程、协程爬虫框架!

一位大佬关于爬虫的系列教程