【Python】线程和协程分别适用于什么情况?

系统 1447 0
原文链接: https://zhuanlan.zhihu.com/p/35179605

(现在人工智能非常火爆,很多朋友都想学,但是一般的教程都是为博硕生准备的,太难看懂了。最近发现了一个非常适合小白入门的教程,不仅通俗易懂而且还很风趣幽默。所以忍不住分享一下给大家。

  点这里https://www.cbedai.net/ialexanderi可以跳转到教程。)

 

链接:https://zhuanlan.zhihu.com/p/35179605

前言

关于网络IO,同步,异步或者阻塞非阻塞永远是绕不开的话题。对于爬虫这种IO密集型任务,如果使用同步的方式进行网络请求,只要某个请求被阻塞了,则会造成整个流程时间的拖长,极大的降低了爬虫的速度。这篇文章将介绍Python实现异步的其中一种方式,协程。并通过一些实例来说明协程的用法,以及好处。

基本知识

 

  • 同步,异步

上文提到了同步与异步两个术语,那么这两者到底有什么区别呢?拿爬虫场景举个例子,比如说现在爬虫需要点开十个链接,IO过程就是打开这十个链接的过程,CPU负责点击链接的事件。显而易见,点击事件是非常快速的,而链接显示的过程是比较缓慢的。同步IO就是爬虫点击了一个网址,等到获得了彻底响应,才去点击下一个网址。而异步IO就是爬虫点击了一个网址,不等获得响应,立刻点击下一个网址,最后等待响应。两者对比,异步的效率会更加高一些。

  • IO密集与计算密集

IO密集型任务指的是磁盘IO或者网络IO占主要的任务,计算量很小,比如请求网页,读写文件等。计算密集型任务指的是CPU计算占主要的任务,比如图形渲染中矩阵的运算(当然现在都用GPU来完成)。

  • 为什么不使用多线程

一般来说,解决并行事件的传统思路可能是使用多线程。 但是多线程有几个劣势,第一是资源的开销,第二是由于Python GIL(全局解释锁)的存在,多线程并非并行执行,而是交替执行,造成多线程在计算密集型任务的效率并不高。

  • 协程是什么

协程的概念比较容易理解,它在单线程中,允许一个执行过程A中断,然后转到执行过程B,在合适的时间又可以转回来,从而在单线程中实现了类似多线程的效果。而它有以下几点优势:

 

    • 数量理论上可以是无限个,因为是在单线程上进行,没有线程间的切换操作,效率比较高。
    • 不需要“锁”的机制,所有的协程都在一个线程中。
    • 比较容易Debug,因为代码是顺序执行。

更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论