赞
踩
asyncio介绍
熟悉c#的同学可能知道,在c#中可以很方便的使用async和await来实现异步编程,那么在python中应该怎么做呢,其实python也支持异步编程,一般使用asyncio这个库,下面介绍下什么是asyncio:
asyncio 是用来编写 并发 代码的库,使用async/await语法。
asyncio 被用作多个提供高性能Python异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。
asyncio 往往是构建 IO 密集型和高层级 结构化 网络代码的最佳选择。
asyncio中的基本概念
可以看见,使用asyncio库我们也可以在python代码中使用async和await。在asyncio中,有四个基本概念,分别是:
Eventloop
Eventloop可以说是asyncio应用的核心,中央总控,Eventloop实例提供了注册、取消、执行任务和回调 的方法。
简单来说,就是我们可以把一些异步函数注册到这个事件循环上,事件循环回循环执行这些函数(每次只能执行一个),如果当前正在执行的函数在等待I/O返回,那么事件循环就会暂停它的执行去执行其他函数。当某个函数完成I/O后会恢复,等到下次循环到它的时候就会继续执行。
Coroutine
协程本质就是一个函数,
import asyncio
import time
async def a():
print('Suspending a')
await asyncio.sleep(3)
print('Resuming a')
async def b():
print('Suspending b')
await asyncio.sleep(1)
print('Resuming b')
async def main():
start = time.perf_counter()
await asyncio.gather(a(), b())
print(f'{main.__name__}Cost:{time.perf_counter() - start}')
if __name__ == '__main__':
asyncio.run(main())
执行上述代码,可以看到类似这样的输出:
Suspending a
Suspending b
Resuming b
Resuming a
main Cost: 3.0023356619999997
关于协程的具体介绍,可以参考我以前的文章 python中的协程 不过以前的那种写法,需要使用装饰器,已经过时了。
Future
Future是表示一个“未来”对象,类似于javascript中的prom
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。