python协程

协程本质上就是一个线程,不过它是协作式的非抢占式的程序,面向的是IO操作。python有GIL的限制,不能充分利用多线程的实现高并发。进程和线程都是通过cpu的调度实现不同任务的有序执行,协程则要在写代码的时候确定执行顺序。由于协程在一个线程中,所以协程不能阻塞。

优缺点:

无需线程上下文切换的开销

在一个线程中,不需要加锁

无法利用多核资源:协程的本质是单线程,需要和进程配合才能运行在多CPU上

进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序

python协程的发展时间较长:

python2.5 为生成器引用.send()、.throw()、.close()方法

python3.3 为引入yield from,可以接收返回值,可以使用yield from定义协程

Python3.4 加入了asyncio模块

Python3.5 增加async、await关键字,在语法层面的提供支持

python3.7 使用async def + await的方式定义协程

此后asyncio模块更加完善和稳定,对底层的API进行的封装和扩展

python将于 3.10版本中移除 以yield from的方式定义协程 (目前版本是3.9.1)

由于asyncio每个版本都会新增功能,对一些旧的底层的API进行封装,极大地方便的使用者,但正因为此,网上有很多教程使用的接口官方已经不建议直接使用,应该改而使用更加高级的API,所以在这里记录一下如何使用这些API。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspgww.html