一、同步与异步
异步编程可以大幅度的提高系统的吞吐量,提高单位时间内发出的请求数目。之前大邓写的爬虫都是同步,就是对aurl发起请求,等待响应。然后再访问burl,等待响应。。。
大量的时间消耗在等待上,如果能近似的同时对多个网址发起请求,等待响应,速度回快很多倍。这里的同时其实是为了让大家便于理解,其实所谓的同时也是有先后顺序的,所以叫异步。
文字描述太别扭,我们水平方向代表时间#同步编程(同一时间只能做一件事,做完了才能做下一件事情)#异步编程 (可以近似的理解成同一时间有多个事情在做,但有先后)
你看同步编程同样的时间访问了3个网址,但是异步编程访问的效率提高了很多倍。
二、async&await
在python3.5之后,开始引入async和await语法结构,通过async关键词定义一个协程(不用管啥名字,总之就理解成异步吧)。其实我也有很多地方不熟悉,没关系,先会用,孰而知之。
2.1 并不成功的套路
网上看了些教程,总结出来大概是以下的模板:import asyncio
#函数名:做现在的任务时不等待,能继续做别的任务。async def donow_meantime_dontwait(url):
response = await requests.get(url)#函数名:快速高效的做任务async def fast_do_your_thing():
await asyncio.wait([donow_meantime_dontwait(url) for url in urls])
#下面两行都是套路,记住就好
loop