
async的主要作用包括在函数定义前加上async关键字, 以此将函数标记为异步函数这件事, 可被用来编写异步函数。如此这般的函数, 于调用时不会立刻执行其代码, 而是返回一个协程对象。协程对象要凭借事件循环也就是event loop来执行。异步编程能够让程序在等待I/O如文件读写、网络请求完成之际, 延续执行其他任务, 而非一直阻塞在那儿, 实现非阻塞I/O。这是经由协程与事件循环的交互得以达成的。当协程碰到await表达式之际, 它会停下执行, 并且把控制权交还给事件循环, 从而让事件循环去处置其他任务或者等待I/O操作完结。提升性能方面: 鉴于异步编程能够充分运用CPU的空闲时段, 削减因等候I/O操作而损耗的时间, 所以能够提升程序的整体性能。特别是在处理诸多并发连接时段, 异步编程的长处更为显著。简化并发编程方面: 尽管异步编程的概念乍一看或许有些繁杂, 可它实际上给出了一种更加简洁、更为直观的方式去处理并发任务。借助协程还有async/await语法, 能够把异步操作如同同步操作那般去编写, 进而让代码变得更易于阅读以及易于维护。将其集成至现有库跟框架里头: 的库给出了构建异步应用所需的工具和抽象层, 进而许多现代库与框架像、Sanic等都对异步编程予以支持, 致使开发异步Web应用、网络爬虫等变得简便快捷。总之, async关键字在里面有诸多方面担当着关键作用, 是实现异步编程, 是提升程序性能一事, 也关乎简化并发编程诸事所必不可缺的。经由学习以及掌握这个异步编程技术这种行为, 针对现代软件开发期间碰到困难的情况能够作出更妥善的应对处理。在当中, async这个关键字, 通常会与await一块儿使用, 借此来定义以及执行异步函数, 也就是所谓的协程。这里存在着一个简单的示例, 它展示出要如何运用async和await去达成一个异步函数, 此函数用于模拟异步IO操作, 比如网络请求或者文件读写。尽管在这里我们是用.sleep()来模拟异步等待。import asyncio # 定义一个异步函数 async def fetch_data(url): print(fStarting to fetch data from {url}) # 模拟异步IO操作比如网络请求 await asyncio.sleep(1) # 假设获取数据需要1秒 return fData from {url} # 主函数 async def main(): # 假设我们要从两个URL获取数据 url1 http://example.com/data1 url2 http://example.com/data2 # 创建两个异步任务 task1 asyncio.create_task(fetch_data(url1)) task2 asyncio.create_task(fetch_data(url2)) # 等待两个任务完成 data1 await task1 data2 await task2 # 打印结果 print(data1) print(data2) # 运行事件循环 if __name__ __main__: asyncio.run(main())执行输出于这个例子里头, 存在着一个异步函数, 该函数对从特定URL那儿获取数据的操作予以模拟。我们借助了.sleep(1)去模拟此项操作所需的1秒钟时长。在main函数当中, 我们借助.同时启动了两个协程, 并且等待它们达成完成状态。鉴于它们属于异步性质的, 因而这两个请求是并行执行的, 并非要等待首个请求竣事后才发送第二个请求。这极大地提升了程序的执行效率,特别是在处理数量众多的I/O操作之际。留意, 此示例里运用了.run(main()) 去开启事件循环并开展主协程main, 于的模块当中, 事件循环是处置所有异步任务的关键机制。