异步爬虫原理|青训营笔记

96 阅读2分钟

这是我参与「第四届青训营」笔记创作活动的第14天。

1基本概念

1.1阻塞

指程序未得到所需计算资源时被挂起的状态 常见的阻塞形式有: ·网络I/O阻塞 ·磁盘I/O阻塞 ·用户输入阻塞

1.2非阻塞

程序在等待某操作过程中,自身不被阻塞可以继续处理其他的事情,则称该程序在该操作上是非阻塞的。非阻塞并不是在任何程序级别、任何情况下都可以存在的,仅当程序封装的级别可以囊括独立的子程序单元时,才可能存在非阻塞状态。

1.3同步

不同程序单元为了完成某个任务,在执行过程中需靠某种通信方式以协调一致,称这些程序单元是同步执行的,同步意味着有序。

1.4异步

为完成某个任务,不同程序单元之间过程中无需通信协调,也能完成任务的方式。不相关的程序单元之间可以是异步的,异步意味着无序。

1.5多进程

多进程就是利用CPU的多核优势,在同一时间并行地执行多个任务,可以大大提高执行效率。

1.6协程

又称微线程、纤程,协程是一种用户态的轻量级线程,拥有自己的寄存器上下文和栈,本质上是个单进程。相对于多进程,无需线程上下文切换的开销,无需原子操作锁定及同步的开销,编程模型非常简单。

2协程用法

2.1event_loop

事件循环,相当于一个无限循环。可以把一些函数注册到这个事件循环上,当满足条件发生的时候,就会调用对应的处理方法。

2.2coroutine

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

2.3task

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

2.4future

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

个人总结

本文重点介绍了阻塞、非阻塞、同步、异步、多进程、协程的概念,以及event_loop、coroutine、task、future的概念。