天天说异步异步但是自己好像很少用过这一块,不过最近终于有机会了。
异步这个概念已经可以说是深入人心,但是说道异步,就不得不先提一下同步,同步我的理解为一步一步顺序运行,第一步做不完就卡在这,不能动;异步则相对,他在处理调用这个事务的时候不会等待这个是否运行完成,先接着运行接下来的事务,通过最后的状态、通知、回调来通知我们此事件的状况。
异步IO库:asuncio
asyncio库
需要事先了解的三个词为Future,Task和coroutine,不管怎么样都跑不出去这三个概念的使用。
首先第一步导入asyncio库
import asyncio
第二步,获取事件循环
loop = asyncio.get_event_loop()
第三步,定义协程或是创建task列表
async def myfunc():
await get_url(url)#await和调用的async def 搭配使用
tasks = [loop.create_task(myfunc(url)) for url in urls]
async 说明这是个协程,await对应着IO,这个IO进行到这里以后不进行阻塞,进入下一个程序的执行
最后一步,loop执行tasks任务,等待完成。
loop.run_until_complete(asyncio.wait(tasks))
#执行直到完成
至此,一个小小的框架已经完成,异步的实现库必须支持异步IO特性,因为它本身就是单线程并行运行,所以单线程发生不能阻塞。