今天来聊一下异步编程(Asynchrous programming).对比一下同步编程(Synchrous programming),例如def,class(面向对象编程)方法.是等一个方法执行完后,再执行下一个方法.在等待的过程中,CPU一直处于空闲状态.在多任务的编程过程中,效率很是低下.因此为提升任务的执行效率,异步编程应运而生.异步编程是对CPU性能的极致压缩,使其发挥出最大的效率.多任务的程,CPU一直处于高速运转状态.在一个任务正在执行的时候,CPU又在安排下一个任务.实现io密集型任务的高并发执行.在python语言中的异步任务模块是asyncio.定义异步函数(协程)的格式是async def 函数名1():对于函数2,同样定义 async def 函数2():如果在执行函数2的时候,马上执行函数1的话,可在函数2的内部用关键字await写入.具体是:await 函数名1(),然后写完函数2的函数体.最后执行也简单.asyncio.run(函数名2).最后就是先执行函数2,没等函数2执行完,就马上执行函数1.对于多个协程函数可以使用gather.具体做法是定义另一个协程函数,在这个协程函数内部,使用关键字await,在等待的过程是这样的:await asyncio.gather(放入多个协程函数),然后写入函数体,最后执行即可.这就是高并发任务.对于同步函数原则上是不能加入异步任务的,会造成任务阻塞.但在实际情况下,有时又不得不使用同步任务.因此可以将同步任务改造成异步函数加入到异步任务.要用到async模块里面两个函数:get_running_loop()和run_in_executor().具体做法是:先定义同步函数,然后定义异步函数.在异步函数里面.可以写入loop asyncio.get_running_loop().然后await loop.run_in_executor(None,同步函数名,同步函数的参数(如果有的话)),返回.最后执行异步函数.对于要等待一段时间的异步函数可以将异步函数丢到后台执行.但是,时间较长的异步任务,可能在后台还没执行完,就被python的垃圾回收站给回收了,导致异步任务失败,常用的处理办法是使用create_task()和 add_done_callback()函数.具体做法是先声明后台任务的集合:backstage_run:set[asyncio.Task]set().先定义一个异步任务.然后又定义一个异步函数.内部写入.task asyncio.create_task(放入异步任务),这是将任务丢到后台.然后.backstage_run.add(task)这里是防止被清除,最后使用task.add_done_callback(backstage_run.discard).执行完自动清除.最后写完函数体.还有一个异步上下文管理.使用到contextlib包里面的asynccontextmanager语法糖.和yield关键字.具体是先使用语法糖asynccontextmanager.定义异步函数1.先开始一个任务,换行写入yield关键字,然后结束任务.再定义一个异步函数2.使用async with 异步函数1.返回.最后执行异步函数2.yield生成器.也有函数的返回值.with是打开之后,使用完毕,自动关闭.防止内存溢出.yield关键字是用来管理上下文的.