我们在做爬虫的时候,都会遇到需要爬的数据量特别巨大的,如果按照以往的一 一下载的话,好费的时间很长,效率极低,所以我们可以利用线程加协程的方法大大提高爬虫的效率。
进程是资源单位,每一个进程里至少有一条线程
线程是执行单位,起到的每一个程序都会默认有一个主线程,演示如下:
t.start()#多线程状态为可以开始工作状态,具体执行时间由spu决定
- for i in range(1000):
- print('子线程',i)
- 面向对象写法:
class MyThread(Thread):
def run(self):
for i in range(1000):
print('子线程',i)
if __name__ =='__main__':
t =MyThread()
t.start()
for i in range(1000):
print ('主线程',i)
进程的写法跟线程的差不多,只需要导入的进程的模块,然后把要执行的对象加上去就好。
接下来就是多线程池的操作演示:
协程的概念:
ibput() 程序也是处于阻塞状态 requests.get(bilbili)在网络请求返回数据之前,程序也是处于阻塞状态 一般情况下,当程序处于 IO操作的时候,线程都会处于阻塞状态 协程,当程序遇见了IO操作的时候,可以选择性的切换到其他任务上 在微观上是一个任务一个任务的进行切换,切换条件一般就是IO操作 在宏观上,我们能看到的其实是多个任务一起在执行 多任务异步操作 上方所讲的一起,都是在单线程的条件下
协程的创建方式:
注意:await是挂起的意思,一般这个操作都会在协程对象前面
用异步的操作代码,来处理这个问题得出的结果是:
不过这样太麻烦了,有个官方推荐的方法:
直接写一个异步总函数,需要的时候直接调用就好。省事,方便。也可以完美的套在我们的爬虫代码上