5 分钟入门 Python 协程

作者/分享人:陈祥安
向 Ta 提问
陈祥安,高级爬虫工程师,有着丰富的爬虫工作经验,从 C# 语言转入到Python 语言,擅长各种爬虫技术,熟悉大规模爬虫开发,热爱并喜欢钻研 Python。最近沉迷于异步编程中。公众号:Python学习开发

在爬虫操作中,协程比多线程更有优势。协程是单线程的,单线程就能实现高并发。

在 Python 3.4 时候引进了协程的概念,它使用一种单线程单进程的的方式实现并发,应用的各个部分彼此合作, 可以显示的切换任务,一般会在程序阻塞 I/O 操作的时候发生上下文切换如等待读写文件,或者请求网络。

协程是异步的一种表现形式。在学习异步爬虫之前我们需要学习一些异步基础的知识。

本场 Chat 将带着大家 5 分钟快速入门 Python 异步编程。

通过本场您将学到:

  1. 了解什么是协程
  2. 协程的优点和缺点
  3. 如何启动一个协程
  4. 如何写一个基于协程的并发程序
  5. 如何在协程中使用子线程

面向对象:有一定 Python 基础的同学,懂得生成器方面的知识最好。

已有323人预订
预订达标
文章出炉
交流日期
     
04月06日
04月15日
04月18日 20:30
查看文章评论/提问
蜉蝣
从单个协程入手,到协程的链式调用,协程并发执行,最后是协程中调用普通函数。逻辑很清晰,作为入门很不错。感谢作者!
陈祥安: 感谢支持,新的课程已发布,欢迎关注
陈祥安
当时的交流是在群里进行的所以,关于讨论的问题大家点击阅读实录即可看到,后续的朋友如果订阅了,有问题可以加我微信:italocxa解答。
rzet
读了作者的文章,有一些疑惑。可能以下描述有不正确之处。 1.协程的并发是利用系统的IO复用实现,还是异步IO方式? 2."协程利用的事件循环",就是说事件循环也是一种异步方式。 既然协程本质上是单线程的,那这样的异步方式是如何实现的?
陈祥安: 答:协程的并发是异步 IO 方式实现的,其实在 Python 3.4 的时候使用 Yeild 的方式实现的,只是后来加入了语法糖 async/awati,协程遇到 IO 操作就切换,协程之所以能处理大并发,就是由于挤掉了 IO 操作,使得 CPU 一直运行。 事件循环和异步是两个概念,事件循环是执行我们的异步代码并决定如何在异步函数之间切换的对象。如果某个协程在等待某些资源,我们需要暂停它的执行,在事件循环中注册这个事件,以便当事件发生的时候,能再次唤醒该协程的执行。 运行异步函数我们首先需要创建一个协程,然后创建 Future 或 Task 对象,将它们添加到事件循环中,也就是说异步函数是需要靠事件循环运行的。协程本质上是单线程的,那这样的异步方式,是通过异步函数之间切换的实现的,因为没有阻塞,所以速度很多,看起来像是并发。实际上并不是并发。
ì
Scrapy和异步协程的实现原理一样吗?关于二者的选用有何建议?
陈祥安: 答: Scrapy 是基于 twisted 的实现起来比较复杂,基于的协程 aiohttp 使用起来比较方便,因为协程还可以替代原有的事件循环,比如 uvloop,所以协程的使用更占优势。
M-S-
这个run_until_complete可以用for循环动态传参数,那怎么去并发执行,我用的时候就是for循环,然后依次执行,刚学,有点不是很明白
你可能还喜欢
Python 常见的 170 道面试题全解析:2019 版
陈祥安
近距离接触 DDD
文贺
Apollo 轨迹规划技术分享
Apollo开发者社区
Docker 快速入门
技术人的突破
如何利用碎片时间,提升自己的职场竞争优势
代码GG陆晓明
Spring Boot 工程化最佳实践
ASCE1885
微信扫描登录
关注提示×
扫码关注公众号,获得 Chat 最新进展通知!
添加小助手微信×