高性能异步爬虫

高性能异步爬虫
目的:在爬虫中使用异步实现高性能的数据爬取操作。

异步爬虫的方式:
- 多线程、多进程(不建议):
- 好处:可以为相关阻塞的阻塞单独开启线程或者进程,阻塞操作就可以异步执行。
- 弊端:无法无限制的开启多线程或者多进程。
- 线程池、进程池(适当使用):
- 好处:可以降系统对进程或者线程创建和销毁的一个频率,从而很好的降低系统的开销。
- 弊端:池中线程或者进程的数量是有限的。
- 单线程+异步协程(推荐):
event_loop:事件循环,相当于一个无限循环,我们可以把一些函数注册到这个事件循环上,当满足某些条件的时候,
函数就会被循环执行。程序是按照设定的顺序从头执行到尾,运行的次数也是完全按照设定。
当在编写异步程序时,必然其中有部分程序的运行耗时是比较久的,需要先让出当前程序的控制权,
让其在背后运行,让另一部分的程序先运行起来。当背后运行的程序完成后,
也需要及时通知主程序已经完成任务可以进行下一步操作,但这个过程所需的时间是不确定的,
需要主程序不断的监听状态,一旦收到了任务完成的消息,就开始进行下一步。loop就是这个持续不断的监视器。

    coroutine:中文翻译叫协程,在 Python 中常指代为协程对象类型,我们可以将协程对象注册到事件循环中,
        它会被事件循环调用。我们可以使用 async 关键字来定义一个方法,这个方法在调用时不会立即被执行,
        而是返回一个协程对象。

    task:任务,它是对协程对象的进一步封装,包含了任务的各个状态。

    future:代表将来执行或还没有执行的任务,实际上和 task 没有本质区别。

    async:定义一个协程。

    await:用来挂起阻塞方法的执行。
原文地址:https://www.cnblogs.com/gerenboke/p/13389105.html