0
点赞
收藏
分享

微信扫一扫

多线程与多进程,+池,以及协程的概念

钟罗敏 2022-03-22 阅读 75
python

我们在做爬虫的时候,都会遇到需要爬的数据量特别巨大的,如果按照以往的一 一下载的话,好费的时间很长,效率极低,所以我们可以利用线程加协程的方法大大提高爬虫的效率。

进程是资源单位,每一个进程里至少有一条线程

线程是执行单位,起到的每一个程序都会默认有一个主线程,演示如下:

         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是挂起的意思,一般这个操作都会在协程对象前面

用异步的操作代码,来处理这个问题得出的结果是:

 不过这样太麻烦了,有个官方推荐的方法:

 直接写一个异步总函数,需要的时候直接调用就好。省事,方便。也可以完美的套在我们的爬虫代码上

举报

相关推荐

0 条评论